【问题标题】:Start detached process using pywinrm in remote desktop在远程桌面中使用 pywinrm 启动分离的进程
【发布时间】:2020-02-10 02:39:07
【问题描述】:

要远程管理 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

当我在本地执行上面的命令时,它可以正常工作,它会返回进程 ID,并且命令在单独的窗口中执行。

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

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

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

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

谢谢, 尼克西特

【问题讨论】:

    标签: python winrm


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 不,这不会返回进程ID,它会分离线程但是当我想检查命令的状态时,它会阻止它。
    • 如何改变你的脚本——你正在执行的脚本,让它在后台运行。 powershell.exe -windowstyle hidden -file C:\the_script_you_really_want_to_run.ps1 或者某个版本,意味着让它直接在后台运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多