如何解决:通过win32_Process.Create通过Python WMI模块调用的远程wmic没有文件输出

时间:2019-06-01 21:08:52

标签: python wmi wmic

我正在尝试通过Win32_Process.Create()函数通过WMI模块在远程主机上执行WMIC,并通过/ output,更多或>将输出保存在所述远程主机上,但是这些都不产生预期的输出。相反,我收到的是空文件。

我尝试使用/ output,more和>来实现正确的输出,但是结果文件始终为空白。我知道我正在创建具有预期输出的进程,否则,因为我尝试在远程主机上的文件中使用“ ipconfig>”,并且它提供了带有网络配置数据的预期输出,只有WMIC才给我带来麻烦。我还尝试过删除“ cmd.exe / c”部分,并直接与wmic.exe一起运行,但没有运气,还指定了确切的可执行文件位置。

我也尝试过单独使用/ Output:FILENAME和/ Output:STDOUT以及重定向器(>)到文件。似乎都无法正常工作。


import wmi
session = wmi.WMI(computer="192.168.8.132", user="testing", password="testing")
process_startup = session.Win32_ProcessStartup.new()
command = r"wmic.exe /output:C:\Users\testing\WMIUsers0.txt /namespace:\\root\cimv2 UserAccount get * /value"
process_id, return_value = session.Win32_Process.Create(CommandLine=command, ProcessStartupInformation=process_startup)
print("Process Executed: "+command)
print("Process ID: "+str(process_id)+" , Return Value (0 = Success): "+str(return_value)+"\n")




上面的代码在主机上的预期位置而不是实际WMI返回的数据上生成一个空文件。我将上面给出的“命令”复制并粘贴到了远程主机中,它可以按预期用于stdout并在文件中生成数据。

这只是我的代码的一个近似值,但很好地表示了问题-当在WMI模块上远程运行时,我需要修改些什么才能使实际结果填充到目标文件中,而不是空白文件中?

edit:在目标上使用ProcessHacker,我可以看到我的进程以参数'cmd.exe / c wmic /output:"C:\Users\testing\WMIUsers0.txt“ / namespace:\ root \ cimv2 UserAccount启动get * / value'-如果我将其复制粘贴到单独的cmd窗口中,它将按预期工作并生成文件,但是当我远程运行它时,即使它具有正确的参数,也会生成一个空文件。我要疯了,试图弄清楚为什么这不起作用。

Edit2:我已经尝试过使用subprocess.call,check_output和其他东西进行许多不同的变体,并且在Python中尝试这样做没有任何运气。今天不是我的日子。

Edit3:决定只使用subprocess.getoutput并在本地存储数据,因为让它远程执行使我发疯了-不知道为什么在检查执行内容后它不起作用-相同的cmdline窗口参数,但是会生成一个空白文件,其他数据丰富。疯狂,必须是WMI模块的某些功能,无法正确传输。。。。。。。

0 个答案:

没有答案