使用 Wmi win32_Process 执行远程进程 - 获取进程的标准输出
Posted
技术标签:
【中文标题】使用 Wmi win32_Process 执行远程进程 - 获取进程的标准输出【英文标题】:Remote Process Execution using Wmi win32_Process - Getting Stdout of Process 【发布时间】:2012-04-25 12:21:08 【问题描述】:您好,我能够使用 Wmi 执行远程进程,并且能够获得进程的返回值和进程 ID。有什么方法可以获取由 Wmi 启动的进程的输出。例如。如果我启动一个在控制台中打印某些内容的 exe,我将能够使用此 Api 获取这些值。任何帮助表示赞赏。
【问题讨论】:
【参考方案1】:您必须将输出重定向到一个文件,然后通过网络读取该文件。
使用 CMD.EXE /S /C 选项来执行此操作。
运行Program.exe
的示例命令行:
CMD.EXE /S /C " "c:\path\to\program.exe" "argument1" "argument2" > "c:\path\to\stdout.txt" 2> "c:\path\to\stderr.txt" "
然后像这样\\servername\c$\path\to\stdout.txt
连接到服务器以读取标准输出结果。
注意:请注意要运行的命令周围的额外引号。这些是确保正确解释命令行所必需的。
【讨论】:
给其他任何试图从 WMI 获取输出的人Win32_process
- 请注意上述命令中的额外引号!这些非常重要。阅读cmd.exe /?
,了解有关报价处理的更多信息。【参考方案2】:
您可以使用psexec来执行program.exe并通过管道获取stdout
p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while p.poll() is None:
line = p.stdout.readline()
line = line.strip().decode('gbk')
if line:
print('Subprogram output: []'.format(line))
if p.returncode == 0:
print('Subprogram success')
return True
else:
print('Subprogram failed')
return False
【讨论】:
以上是关于使用 Wmi win32_Process 执行远程进程 - 获取进程的标准输出的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在远程计算机上为 MicrosoftTPM 命名空间查询 WMI? [对 Win32_Tpm 类的远程 WMI 查询失败,HRESULT 0x80041013]