我试图在一系列PowerShell代码中添加过滤器或查询,但我得到了奇怪的结果。我可以使用任何WMI查询复制此问题。这是一个例子:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "Get-WmiObject -class Win32_Processor -Namespace root\cimv2 -filter 'Status = `"OK`"'"
这给了我这个错误:Get-WmiObject:无效查询"从Win32_Processor中选择*,其中Status = OK"。但是如果我在已经打开的PowerShell窗口中运行它,就像这样:
Get-WmiObject -class Win32_Processor -Namespace root\cimv2 -filter 'Status = "OK"'
工作正常。所以我不理解这种行为。我尝试了各种单引号,双引号和转义字符,但似乎没有任何效果。
答案 0 :(得分:1)
您的问题是对使用cmd解析器引用的误解(因为调用powershell.exe时使用的是什么):
powershell.exe -Command ""
双引号之间的所有内容都将传递给-Command
。在你的情况下,最简单的方法是转义单引号(通过加倍计数),因为cmd以特殊方式处理双引号(通常是通过删除它们):
powershell.exe -Command "Get-WmiObject -Class Win32_Processor -Filter 'Status = ''OK'''"
作为脚注,root/cimv2
是Get-WmiObject