Запустите отдельный процесс, используя pywinrm на удаленном рабочем столе - PullRequest
0 голосов
/ 08 февраля 2020

Для удаленного управления клиентом windows я использую Pywinrm. Задача, которую я пытаюсь выполнить sh, - выполнить один сценарий, и я не хочу ждать завершения выполнения. но мне нужен идентификатор процесса этой

Так что для этого я выяснил команду Power Shell Start-Process, которая прекрасно работает, локально

$process = Start-Process -FilePath "fio" "Arguments" -PassThru -RedirectStandardError C:/SMB-Share-991A-F73SV-fio.alogs.std.err.bak -RedirectStandardOutput C:/SMB-Share-991A-F73SV-fio.alogs.std.out.bak; echo $process.id

вышеупомянутая команда отлично работает, когда я ее выполняю локально он возвращает мне идентификатор процесса, а команда выполняется в отдельном окне.

, но когда я вызываю его с помощью pywinrm, кажется, что он работает не так, как ожидалось.

session = winrm.Session(host, auth=(user, password), transport='credssp')
result = session.run_ps(script)

, поэтому здесь я был ожидая, что это должно дать мне процесс сразу после казни. но в настоящее время он ожидает завершения всего процесса, а затем возвращает идентификатор.

Любое предложение о том, что я должен сделать, выполнить команду в отдельном режиме.

Спасибо, Nixit

1 Ответ

0 голосов
/ 09 февраля 2020

Не уверен, что это даст желаемый результат, но, проверяя код этого пакета, вы можете сделать что-то вроде этого:

session = winrm.Session(host, auth=(user, password), transport='credssp')
prtl = session.protocol
encoded_ps = b64encode(script.encode('utf_16_le')).decode('ascii')
command = 'powershell -encodedcommand {0}'.format(encoded_ps)
shell_id = prtl.open_shell()
command_id = prtl.run_command(shell_id, command)
...