如何修复:通过win32_Process.Create通过Python WMI模块调用远程wmic时没有文件输出

如何修复:通过win32_Process.Create通过Python WMI模块调用远程wmic时没有文件输出,python,wmi,wmic,Python,Wmi,Wmic,我正试图通过Win32_Process.Create()函数通过WMI模块在远程主机上执行WMIC,并通过/output、more或>在所述远程主机上保存输出,但这两个函数均未生成预期输出。相反,我收到的是空文件 我曾尝试使用/output、more和>来实现正确的输出,但结果文件总是空白的。我知道我正在创建具有预期输出的进程,否则,因为我尝试在远程主机上的文件中使用“ipconfig>”,它会提供带有网络配置数据的预期输出,而只有WMIC会给我带来麻烦。我还尝试删除了“cmd.exe/c”部分

我正试图通过Win32_Process.Create()函数通过WMI模块在远程主机上执行WMIC,并通过/output、more或>在所述远程主机上保存输出,但这两个函数均未生成预期输出。相反,我收到的是空文件

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

我还尝试单独使用/Output:FILENAME和/Output:STDOUT以及重定向器(>)对文件进行重定向。似乎没有一个能正常工作


导入wmi
session=wmi.wmi(computer=“192.168.8.132”,user=“testing”,password=“testing”)
process\u startup=session.Win32\u ProcessStartup.new()
command=r“wmic.exe/output:C:\Users\testing\WMIUsers0.txt/namespace:\\root\cimv2 UserAccount get*/value”
进程id,返回值=会话。Win32\u进程。创建(命令行=命令,进程启动信息=进程启动)
打印(“执行的进程:”+命令)
打印(“进程ID:+str(进程ID)+”,返回值(0=成功):“+str(返回值)+”\n”)
上述代码在主机上预期位置生成一个空文件,而不是实际WMI返回的数据。我将上面给出的“命令”复制粘贴到远程主机中,它在stdout中正常工作,并在文件中生成数据

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

编辑:在目标上使用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模块的某些功能阻止了正确传输..或者…不知道。

如果是
wmic
,只做常规的WMI查询不是更好吗?这是一个潜在的选择,但为了一致性,我真的想让它工作起来——因为这一直困扰着我一整天。如果是
wmic
,只是做常规的WMI查询不是更好吗?这是一个潜在的选择,但为了一致性,我真的想让它工作起来——因为这一直困扰着我一整天。