从csv搜索关键字并显示结果

时间:2019-06-04 03:36:36

标签: powershell csv

在“ CSV包含软件名称”列中

我需要从中搜索包含7-zip(或cmm)的关键字,如果搜索到它,请显示其版本。

$csvtxt = @'
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
'@

$csv = ConvertFrom-Csv $csvtxt
$soft1 = "7-zip"
$soft2 = "cmm"

2 个答案:

答案 0 :(得分:1)

您可以使用-match处理集合的方式。这将提供与正则表达式模式匹配的对象。

它做什么...

  • 通过伪装读取CSV文件来创建要使用的数据集
  • 创建要检查的软件列表
  • 将该列表转换为转义的正则表达式OR模式
  • 使用上面的模式对集合运行-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来获取。 [咧嘴]

答案 1 :(得分:0)

您将在此处使用Where-Object cmdlet。

ConvertFrom-Csv $CSVTxt | Where-Object -FilterScript { $_.SoftName -match "7-zip|cmm" } | Select-Object -Property Version

详细了解Where-Object here