使用WMI-Client-Wrapper在Ubuntu远程执行Windows程序并获取日志求助
解决WMI-Client-Wrapper执行远程程序及取回日志的问题
我之前也在Ubuntu 16.04环境下用WMI-Client-Wrapper处理过类似的跨平台操作需求,结合你的场景,下面是具体的排查和解决步骤:
一、解决可执行文件执行失败的问题
首先要确认几个关键环节,避免进程卡住或权限不足:
- 确保路径正确转义:Windows系统的路径在WMI命令中必须使用双反斜杠(
\\),比如远程机器上的Process Explorer路径应该写成C:\\temp\\procexp.exe,而不是Linux风格的单斜杠。 - 添加静默执行参数:像Process Explorer这类工具会弹出EULA确认窗口,直接执行会导致进程卡住无法完成。一定要加上静默参数,比如:
这里的wmic -U your-domain/your-user%your-password //remote-win-host "call win32_process create 'C:\\temp\\procexp.exe /accepteula /s /output C:\\temp\\procexp.log'"/accepteula跳过协议确认,/s静默运行,/output指定日志输出路径,确保程序能后台执行并生成日志。 - 验证账号权限:确保你使用的Windows账号拥有足够的权限(比如管理员权限)来执行程序。如果遇到权限问题,可以尝试在命令中指定
runas参数,或者提前给账号赋予对应目录的执行权限。
二、取回远程日志文件的方法
日志生成后,有两种可靠的方式将其取回Linux机器:
方式1:直接读取日志内容到本地文件
通过WMI调用Windows的cmd命令读取日志内容,并将输出重定向到本地文件:
wmic -U your-domain/your-user%your-password //remote-win-host "call win32_process create 'cmd /c type C:\\temp\\procexp.log'" > ~/local-procexp.log
这种方式不需要额外配置共享,直接通过WMI的输出流获取日志内容。
方式2:通过WMI复制文件到SMB共享(适合大日志文件)
如果日志文件较大,可以在Linux机器上临时创建SMB共享,然后用WMI命令将远程日志复制到共享目录:
- 在Ubuntu上安装并配置SMB服务(这里假设共享目录为
/tmp/win-share) - 执行WMI复制命令:
wmic -U your-domain/your-user%your-password //remote-win-host "call win32_file where name='C:\\temp\\procexp.log' copyTo '\\\\your-ubuntu-ip\\win-share\\procexp.log'"
三、额外排查技巧
- 确认进程执行状态:在取回日志前,先检查远程程序是否已经执行完成,避免取到不完整的日志:
如果返回结果为空,说明进程已经结束,可以安全取回日志。wmic -U your-domain/your-user%your-password //remote-win-host "select * from win32_process where name='procexp.exe'" - 检查日志文件是否生成:如果日志文件不存在,先排查程序是否真的执行成功,或者输出路径是否写错:
wmic -U your-domain/your-user%your-password //remote-win-host "select * from win32_logicalfile where name='C:\\temp\\procexp.log'"
内容的提问来源于stack exchange,提问作者Devanshu Misra
相关产品推荐
相关产品推荐

