вы можете использовать способ, которым -match
работает против коллекции.это даст объекты, которые соответствуют шаблону регулярных выражений.
что он делает ...
- создать набор данных для работы путем имитации чтения в CSV-файле
- создать список программного обеспечения для проверки на
- преобразует этот список в экранированный шаблон регулярных выражений ИЛИ
- запускает оператор
-match
для коллекции, используя приведенный выше шаблон - , сохраняет результаты в
$FoundSoftware
коллекции - показать его на экране
вот код ...
# fake reading in a CSV file
# in real life, use Import-CSV
$InStuff = @'
softname,version
7-Zip 18.05 (x64),18.05
Adobe Acrobat DC,18.011.20038
Adobe CMM,1.0
Adobe Flash Player 27 ActiveX,27.0.0.187
Adobe Flash Player 27 PPAPI,27.0.0.187
'@ | ConvertFrom-Csv
$SoftwareList = @(
'7-zip'
'cmm'
)
$Regex_SL = $SoftwareList.ForEach({[regex]::Escape($_)}) -join '|'
$FoundSoftware = $InStuff -match $Regex_SL
# if you dislike the way that "-match" works directly on an array, use the next line
#$FoundSoftware = $InStuff.Where({$_.SoftName -match $Regex_SL})
$FoundSoftware
вывод ...
softname version
-------- -------
7-Zip 18.05 (x64) 18.05
Adobe CMM 1.0
если вы хотите только голыеимена, вы можете использовать Select-Object -ExpandProperty
, чтобы получить это.[ ухмылка ]