通过命令行查询进程

时间:2013-12-16 16:19:20

标签: wmi wmi-query wmic

我正在尝试在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'

仍然得到相同的错误,我也尝试将单引号更改为双引号,但它不起作用。

有人知道是否可以进行该查询吗?

2 个答案:

答案 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在末尾。

这花了我几个小时来找到这个。 干杯!