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

2024-04-29 02:18:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

因此,我想出了powershell命令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

当我在本地执行上述命令时,该命令工作正常,它返回进程id,并且该命令在单独的窗口中执行

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

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

所以在这里,我希望它在执行之后立即给我processid。但目前,它正在等待整个过程完成,然后返回id

任何关于在分离模式下执行命令的建议

谢谢, 尼克西特


Tags: 命令idshare过程sessionprocessstartfio
1条回答
网友
1楼 · 发布于 2024-04-29 02:18:44

不确定这是否会得到您想要的结果,但通过探测该软件包的代码,您可以执行以下操作:

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)

相关问题 更多 >