我正在尝试在WMI中执行以下查询:
SELECT ProcessID from Win32_Process where CommandLine='C:\Windows\system32\calc.exe'
但是我收到了“无效查询”错误。我也尝试过:
SELECT ProcessID from Win32_Process where CommandLine='C:\\Windows\\system32\\calc.exe'
仍然得到相同的错误,我也尝试将单引号更改为双引号,但它不起作用。
有人知道是否可以进行该查询吗?
答案 0 :(得分:0)
是和否取决于如何生成calc.exe。例如,当我在cmd.exe窗口中键入calc时,我的calc获得了一个'calc'命令行。当我在powershell.exe控制台中输入calc时,它会得到一个完整的路径。 Win32_Process'命令行'变量不是可靠的IMO。以下是一些不同的结果来证明我的观点。
cmd.exe 4028 C:\Windows\system32\cmd.exe /K set
calc.exe 2580 "C:\Windows\system32\calc.exe"
notepad.exe 3612 "C:\Windows\system32\notepad.exe"
cmd.exe 2864 "C:\Windows\system32\cmd.exe"
conhost.exe 480 \??\C:\Windows\system32\conhost.exe
WMIC.exe 3596 wmic
WmiPrvSE.exe 2272 C:\Windows\system32\wbem\wmiprvse.exe
cmd.exe 2296 "C:\Windows\system32\cmd.exe"
conhost.exe 3708 \??\C:\Windows\system32\conhost.exe
notepad.exe 1284 "C:\Windows\system32\notepad.exe"
calc.exe 1736 calc
powershell.exe 3136 "C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe"
为了使它工作,你需要在SQL语句中使用OR子句,匹配'calc'或“C:\ Windows \ system32 \ calc.exe”
答案 1 :(得分:0)
此外,Windows在whitespace
之后和第一个参数之前的命令行中添加了额外的ExecutablePath
。
即使没有参数,并且可执行文件被引号括起来(因为路径中有whitespaces
),在大多数情况下,命令行是ExecutablePath
和最后whitespace
在末尾。
这花了我几个小时来找到这个。 干杯!