Поиск литеральной строки с помощью Select-String и извлечение части строки - PullRequest
0 голосов
/ 29 мая 2019

Значение $DeviceID: "PCI\VEN_8086&DEV_9D3A&SUBSYS_225617AA&REV_21\3&11583659&1&B0"

Я пытаюсь найти эту строку в файлах .INF с помощью «Select-String»:

 Select-String -Path C:\file.inf -Pattern "$DeviceID"

Нострока не будет принята как есть, возникла проблема с "\ V":

Select-String : La chaîne PCI\VEN_8086&DEV_9D3A&SUBSYS_225617AA&REV_21\
3&11583659&1&B0 n’est pas une expression régulière valide: analyse de
"PCI\VEN_8086&DEV_9D3A&SUBSYS_225617AA&REV_21\3&11583659&1&B0" - Séquence
d'échappement \V non reconnue.
Au caractère Ligne:15 : 5
+     Select-String -Path $($_.FullName) -pattern "$($erreur.DeviceID)"
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument : (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : InvalidRegex,Microsoft.PowerShell.Commands.SelectStringCommand

Извините за французский, но в основном говорится: "String не является допустимым регулярным выражением. Escape sequence \ Vне распознан ".

Ответы [ 3 ]

1 голос
/ 29 мая 2019

PowerShell пытается выполнить сопоставление с регулярным выражением.Добавьте переключатель -SimpleMatch для поиска литеральной строки в $ DeviceID без регулярного выражения.

Select-String -Path C:\file.inf -Pattern $DeviceID -SimpleMatch
1 голос
/ 30 мая 2019

Я вижу, что у вас уже есть свой ответ, но есть другой переключатель, который также сделает это.

Для сравнения ...

-list

select-string -path "$TargeUNC\*.ps1" -Pattern 'Get-WmiObject' -list | 
Select-Object -First 3

# Results

2018-01-15 Enable the Disk Cleanup tool on Windows Server.ps1:45:$wmiOS = Get-WmiObject -Class Win32_OperatingSystem
3D_chart.ps1:1:get-wmiobject win32_perfformatteddata_perfdisk_logicaldisk
7 cmdlet Hyper-V Tips.ps1:15:$vm = Get-WmiObject -Namespace root\virtualization\v2 -Class 

-vs -SimpleMatch

select-string -path "$TargeUNC\*.ps1" -Pattern 'Get-WmiObject' -SimpleMatch | 
Select-Object -First 3

# Results

2018-01-15 Enable the Disk Cleanup tool on Windows Server.ps1:45:$wmiOS = Get-WmiObject -Class Win32_OperatingSystem
3D_chart.ps1:1:get-wmiobject win32_perfformatteddata_perfdisk_logicaldisk
7 cmdlet Hyper-V Tips.ps1:15:$vm = Get-WmiObject -Namespace root\virtualization\v2 -Class 
1 голос
/ 29 мая 2019

Select-String по умолчанию использует механизм регулярных выражений .NET.Чтобы выполнить простое сопоставление строк, используйте параметр переключателя -SimpleMatch:

Select-String -Path C:\file.inf -pattern "$DeviceID" -SimpleMatch
...