使用Get-CimInstance的Filter参数按Name过滤Win32_Product报错,如何解决?
解决Get-CimInstance Filter参数的"Invalid query"错误
你的问题出在混淆了PowerShell自身的通配符规则和WQL(Windows Management Query Language)的语法要求,这是用CIM查询时很容易踩的坑!
错误原因拆解
- 你用了PowerShell的通配符
*,但WQL里的通配符是%(对应PowerShell的*),单个字符匹配用_(对应PowerShell的?) - Filter参数需要的是完整的WQL WHERE子句条件,你只写了
"Microsoft*",缺少了属性名和LIKE运算符,不符合WQL的查询语法
正确的命令写法
要实现和管道版本完全一致的效果,且不使用管道,把Filter参数改成标准的WQL条件即可:
Get-CimInstance -ClassName Win32_Product -Property Name -Filter "Name LIKE 'Microsoft%'"
额外小提示
- 注意Filter里的匹配字符串要用单引号包裹,这样可以避免PowerShell解析双引号里的内容时出现意外
- 另外提个最佳实践:
Win32_Product类在调用时会触发MSI的一致性检查,可能导致系统短暂卡顿甚至触发不必要的安装修复动作。如果是生产环境或者频繁查询的场景,更推荐通过查询注册表路径HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall(或64位系统的HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall)来获取已安装软件信息,效率更高也更安全。
内容的提问来源于stack exchange,提问作者LightningWar
相关产品推荐
相关产品推荐

