【问题标题】:Querying process by CommandLine命令行查询流程
【发布时间】:2013-12-16 16:19:20
【问题描述】:

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

还是出现同样的错误,我也尝试将单引号改为双引号,但没有成功。

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

【问题讨论】:

  • 我正在查看 calc.exe 的 WMI Code Creator 进程命令行,它显示为 calc。没有exe,没有路径,只是计算。确认 ?我从 cmd.exe 启动 calc.exe 以防万一。

标签: wmi wmi-query wmic


【解决方案1】:

是和否。取决于生成 calc.exe 的方式。例如,当我在 cmd.exe 窗口中键入 calc 时,我的 calc 会得到一个命令行“calc”。当我在 powershell.exe 控制台中输入 calc 时,它会得到一个完整的路径。 Win32_Process 'commandline' 变量不是可靠的 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"

【讨论】:

    【解决方案2】:

    此外,Windows 有时会在命令行中 ExecutablePath 之后和第一个参数之前添加一个额外的 whitespace

    即使没有参数并且可执行文件用引号括起来(因为路径中有whitespaces),大多数情况下命令行是ExecutablePath,最后是whitespace

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-07
      • 2013-11-09
      • 2020-05-13
      • 2022-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      相关资源
      最近更新 更多