使用 WMIC 的命令行输出仍然为空,但显示在 taskmgr gui (Windows)

Command Line output still remains as null using WMIC, but displays in taskmgr gui (Windows)

下面显示了 frmweb.exe 进程的 GUI 显示(附 image/png ) 其中命令行参数可见。

当尝试通过命令行捕获相同内容时,它会抛出空值。 以下步骤粘贴为文本。需要帮助,谢谢

wmic path win32_process get name, commandline /format:"%WINDI%\System32\wbem\csv" | find "frmweb.exe" >  commandline.txt

notepad commandline.txt

vbox_host,,frmweb.exe
vbox_host
vbox_host,,frmweb.exe
vbox_host
vbox_host,,frmweb.exe
vbox_host
vbox_host,,frmweb.exe
vbox_host
vbox_host,,frmweb.exe
vbox_host
vbox_host,,frmweb.exe
vbox_host
vbox_host,,frmweb.exe
vbox_host
vbox_host,,frmweb.exe
vbox_host
vbox_host,,frmweb.exe
vbox_host
vbox_host,find  "frmweb.exe" ,find.exe

截图如下:

使用批处理文件捕获进程的命令行 frmweb.exe

@echo off
Set "Process=frmweb.exe"
wmic path win32_process Get Name,Commandline /format:csv | find /I "%Process%" | findstr /i /v "find" >CommandLine.txt
Start "" CommandLine.txt

只是为了确保您确实尝试使用了正确的命令,这就是我可能使用 WMIC:

执行任务的方式
WMIC Process Where "Name='frmweb.exe'" Get CommandLine,Name /Format:"C:\Windows\System32\wbem\en-US\csv.xsl">"CommandLines.csv"

因为您已将 csv.xsl 文件复制到 C:\Windows\System32\wbem:

WMIC Process Where "Name='frmweb.exe'" Get CommandLine,Name /Format:csv >commandline.txt

如果您特别希望排除 header 那么:

WMIC Process Where "Name='frmweb.exe'" Get CommandLine,Name /Format:csv|Find ".">commandline.txt

我感觉是您的 CommandLine 中的逗号引起了问题。

如果您更改结果转换为输出的方式可能会有所帮助,所以这里有一个建议。

在文本编辑器中打开您复制到 %SystemRoot%\System32\wbemcsv.xsl 并更改行:

<xsl:template match="VALUE" xml:space="preserve"><xsl:value-of select="."/></xsl:template>

收件人:

<xsl:template match="VALUE" xml:space="preserve">"<xsl:value-of select="."/>"</xsl:template>

想法是您要求它对 csv 输出的每个值字段加双引号。


为确保输出实际上不为空,您可以改为测试来自 PowerShell 的命令:

GWMI Win32_Process -F "Name='frmweb.exe'"|Select Name,CommandLine|Export-CSV -U -NoT .\commandline.txt