Я пытаюсь выполнить WMIC на удаленном хосте через модуль WMI через функцию Win32_Process.Create () и сохранить вывод на указанном удаленном хосте через / 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, препятствующая правильной передаче .. или что-то ... не знаю.