我正在编写一个脚本,以查找名称类似于“ Microsoft Office S *”或“ Microsoft Office P *”的所有程序
我在搜索一个或另一个时使代码正常工作,但不能同时搜索两者。下面是一些示例:
作品
get-wmiobject Win32_Product | Where Name -like "Microsoft Office S*"| Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
作品
get-wmiobject Win32_Product | Where Name -like "Microsoft Office S*"| Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
不工作
get-wmiobject Win32_Product | Where Name -like ("Microsoft Office S*" -or "Microsoft Office P*")| Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
不工作
get-wmiobject Win32_Product | Where Name -like ("Microsoft Office S*") -or Name -like ("Microsoft Office S*")| Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
答案 0 :(得分:3)
我相信这里的问题不是使用Where-Object
脚本块。如果将查询修改为以下内容,则问题将消失。
Get-WmiObject Win32_Product | Where-Object {$_.Name -like "Microsoft Office S*" -or $_.Name -like "Microsoft Office P*"}
答案 1 :(得分:0)
除了使用脚本块和-或在何处,像这样的正则表达式很方便:
where name -match 'Microsoft Office S|Microsoft Office P'
答案 2 :(得分:0)
对集成帮助有所帮助:
Get-Help Where
在可用的语法中,您将找到
Where-Object [-Property] <string> [[-Value] <Object>] -Like [-InputObject <psobject>] [<CommonParameters>]
在您的第三个示例中:“ Microsoft Office S *”-或“ Microsoft Office P *”的计算结果为true,它不起作用,因为它与:
相同Where Name -like $True
始终为假(除非名称值为$ True)
对于第四个示例,获取帮助显示where对象没有'or'参数。因此无法正常工作。
在阅读帮助时,请记住inputObject参数包含流水线的psObject。
建议解决方案很好,但我将提出与帮助相匹配的另一种形式:
Where-Object -Property Name -Value '^Microsoft Office S|^Microsoft Office P' -match
如果您需要紧凑的单机版,则等效于:
? Name -match '^Microsoft Office (S|P)'
(?是where-object的别名)