【问题标题】:How to access stdin and stdout in a pythonsub process when using PsExec使用 PsExec 时如何在 pythonsub 进程中访问标准输入和标准输出
【发布时间】:2021-02-09 03:20:48
【问题描述】:

我在 python 子进程中运行 psexec,

import subprocess

prog = subprocess.Popen([
    'C:\\Users\\user\\tools\\PSTools\\PsExec.exe', 
    '-u', 
    'admin', 
    "-p", 
    "pass",
    "cmd.exe"], 
    stdin=subprocess.PIPE, 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE, 
    universal_newlines=True
)

在执行此操作时,psexec 打开一个新的提升终端窗口就好了,我要问的是无论如何都要使用子进程来控制这个窗口,因为它是最初启动它的?因为目前stdin和stdout似乎只是启动psexec的子进程,而不是psexec产生的终端。

【问题讨论】:

    标签: python cmd subprocess uac psexec


    【解决方案1】:

    PsExec 使用管理共享将文件复制到目标计算机,然后将其作为服务启动,然后该服务启动指定的程序。所以你的程序没有连接。

    使用 COM

    开始执行远程脚本对象。

    对象.执行

    参数

    对象

    WshRemote 对象

    备注

    WshRemote 对象的 Start 事件在脚本被触发时触发 开始执行。不要将 Execute 方法与 Exec 混淆 方法(WScript 对象的)。

    示例

    以下示例演示了如何使用 Execute 方法 创建一个 WshRemote 对象(启动一个远程脚本的实例)。

    [VBScript]

    Dim Controller, RemoteScript
    Set Controller = WScript.CreateObject("WSHController")
    Set RemoteScript = Controller.CreateScript("remote1.js")
    RemoteScript.Execute
    
    Do While RemoteScript.Status <> 2 
        WScript.Sleep 100
    Loop
    

    [JScript]

    var Controller = WScript.CreateObject("WSHController");
    var RemoteScript = Controller.CreateScript("remote1.js");
    RemoteScript.Execute();
    
    while (RemoteScript.Status != 2) {
        WScript.Sleep(100);
    

    来自帮助http://download.microsoft.com/download/winscript56/Install/5.6/W982KMeXP/EN-US/scrdoc56en.exe

    【讨论】:

      最近更新 更多