在远程桌面中使用 pywinrm 启动分离进程

Start detached process using pywinrm in remote desktop

为了远程管理 windows 客户端,我正在使用 Pywinrm。我要完成的任务是执行一个脚本,我不想等待执行完成。但我需要那个

的进程 ID

为此,我想出了 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

上面的命令在我本地执行时工作正常,它 returns 我的进程 ID 和命令在单独的 window.

中执行

但是当我使用 pywinrm 调用它时,它似乎没有按预期工作。

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

所以在这里我期待它应该在执行后立即给我 processid。但目前,它正在等待整个过程完成,然后 returns id。

关于在分离模式下执行命令我应该做什么的任何建议。

谢谢, 尼西特

不确定这是否会得到你想要的结果,但是你可以通过检查那个包的代码来做这样的事情:

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)