PowerShell:如何在Where-object中选择多个名称

时间:2014-05-20 20:02:43

标签: powershell powershell-v2.0 powershell-v3.0

我试图使用以下方法列出PC上安装的一些软件:

Get-WmiObject -Class Win32_Product |
Select-Object -Property name,version |
Where-Object {$_.name -like '*Java*'}

它有效,但当我在Where-Object中添加更多名称时,它没有给我带来任何错误的结果。

Get-WmiObject -Class Win32_Product |
Select-Object -Property name,version |
Where-Object {$_.name -like '*Java*','*python*','*adobe*','*access*'}

为什么它只能用一个名字?

2 个答案:

答案 0 :(得分:2)

我不认为-like将在右侧采用阵列。试试一个正则表达式:

Where-Object {$_.name -match 'Java|python|adobe|access'}

答案 1 :(得分:1)

-Like运算符采用字符串参数(不是字符串数组),因此无论你给它什么,它都会被转换为[string]。如果您将参数转换为字符串:

[string]('*Java*','*python*','*adobe*','*access*') 

你得到:

*Java* *python* *adobe* *access*

这就是你想要匹配的东西(你没有任何类似的文件名)。

最简单的方法是切换到-match运算符和交替的正则表达式:

Where-Object { $_.name -match 'Java|python|adobe|access' }