WMI过滤器问题

时间:2011-10-06 10:25:57

标签: powershell wmi powershell-v2.0 wmi-query

我的会话中启动了一个notepad.exe:

gwmi -Query "Select CommandLine from Win32_Process where CommandLine='C:\Windows\system32\notepad.exe'"

给出

Get-WmiObject : Demande non valide
Au niveau de ligne : 1 Caractère : 5
+ gwmi <<<<  -Query "Select CommandLine from Win32_Process where CommandLine='C:\Windows\system32\notepad.exe'"
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], ManagementException
    + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

我测试:

gwmi -Query "Select CommandLine from Win32_Process where CommandLine='C:\\Windows\\system32\\notepad.exe'"

它什么都没有

gwmi -Query "Select CommandLine from Win32_Process where CommandLine LIKE '%C:\\Windows\\system32\\notepad.exe%'"

完美运作

__GENUS          : 2
__CLASS          : Win32_Process
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
CommandLine      : "C:\Windows\system32\notepad.exe"

也许PowerShell和WMI之间存在通配符问题,但任何人都可以帮助我使过滤器CommandLine='C:\Windows\system32\notepad.exe'正常工作

3 个答案:

答案 0 :(得分:1)

CommandLine属性的值包含引号,因此它们也需要进行转义。

一个有效但可怕的字符串是:

gwmi -Query "Select * from Win32_Process where CommandLine = '`"c:\\windows\\system32\\notepad.exe`"'"

答案 1 :(得分:0)

你需要包含引号,但由于我不记得如何在WQL中转义它们,我会在PSH中执行:

gwmi -class Win32_Process -filter "CommandLine like '`"C:\\Windows\\system32\\notepad.exe`"'"

过滤器表达式是双引号,字符串参数为LIKE,单引号。作为该参数一部分的双引号需要引自PowerShell。

答案 2 :(得分:0)

Get-Process | ? {$_.Path -eq 'C:\Windows\system32\notepad.exe'}

Get-Process | ? {$_.processname -eq 'notepad'}