批处理中使用PowerShell Get-WmiObject通配符查询远程应用版本失败
批处理中嵌入PowerShell查询远程应用版本的修正方案
问题根源
批处理与PowerShell的引号解析规则存在差异,原命令未正确包裹PowerShell查询语句,导致*被识别为独立的位置参数,触发"找不到接受参数'*'的位置参数"错误。
修正后的批处理命令
以下两种写法均可正常运行:
写法1:转义双引号包裹查询语句
Powershell.exe -Command "Get-WmiObject -ComputerName %CN% -Query \"Select * From Win32_Product Where name Like 'McAfee%'\" | Select-Object Name, Version" >>%LOG%
写法2:用单引号包裹查询语句(内部单引号双写转义)
Powershell.exe -Command "Get-WmiObject -ComputerName %CN% -Query 'Select * From Win32_Product Where name Like ''McAfee%''' | Select-Object Name, Version" >>%LOG%
关键修正点
- 必须添加
-Command参数,明确告知PowerShell执行的是完整命令字符串 - 确保
-Query参数的查询语句被完整包裹,避免批处理拆分参数 - 推荐使用
Select-Object替代简写的select,提升命令兼容性
更优替代方案(推荐)
由于Get-WmiObject已被PowerShell弃用,建议改用Get-CimInstance,命令如下:
Powershell.exe -Command "Get-CimInstance -ComputerName %CN% -Query \"Select * From Win32_Product Where name Like 'McAfee%'\" | Select-Object Name, Version" >>%LOG%
内容的提问来源于stack exchange,提问作者Tiagoeb
相关产品推荐
相关产品推荐

