PowerShell:添加筛选器或查询以获取WMIOObject

PowerShell:添加筛选器或查询以获取WMIOObject,powershell,wmi,Powershell,Wmi,我试图在PowerShell代码行中添加一个过滤器或查询,但得到了奇怪的结果。我可以使用任何WMI查询复制此问题。以下是一个例子: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "Get-WmiObject -class Win32_Processor -Namespace root\cimv2 -filter 'Status = `"OK`"'" 这导致了以下错误:Get WMIOObject:无效查询“

我试图在PowerShell代码行中添加一个过滤器或查询,但得到了奇怪的结果。我可以使用任何WMI查询复制此问题。以下是一个例子:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "Get-WmiObject -class Win32_Processor -Namespace root\cimv2 -filter 'Status = `"OK`"'"
这导致了以下错误:Get WMIOObject:无效查询“从Win32_处理器中选择*,其中状态=OK”。但如果我在已打开的PowerShell窗口中运行它,如下所示:

Get-WmiObject -class Win32_Processor -Namespace root\cimv2 -filter 'Status = "OK"'

那很好。所以我不理解这种行为。我尝试了各种方式的单引号、双引号和转义字符,但似乎都不起作用。

您的问题是对使用cmd解析器进行引号的误解(因为调用powershell.exe时会使用这种方法):

双引号之间的所有内容都将传递给
-Command
。在您的情况下,最简单的方法是转义单引号(通过加倍计数),因为cmd以一种特殊的方式处理双引号(通常通过删除它们):


作为一个脚注,
root/cimv2
Get WmiObject

的默认名称空间。您的查询语法错误:
-Filter'Name LIKE“Drivers-%”。
我也尝试过LIKE,但没有成功。出于某种原因,它可以正常工作,无需使用powershell.exe命令启动它,但不能使用。您的声明没有任何意义。你到底是怎么说的?我把问题改成了一个更简单的例子。我想这是我的问题,我不知道你可以通过把单引号加倍来逃避单引号。我认为你必须像使用双引号一样使用瓷砖。
powershell.exe -Command ""
powershell.exe -Command "Get-WmiObject -Class Win32_Processor -Filter 'Status = ''OK'''"