PSExec不显示已启动子进程的输出(本地计算机)

时间:2016-02-11 09:48:57

标签: windows psexec sysinternals

我们需要从会话0隔离到会话1中的登录用户的产生过程。 此任务通过使用psexec完成,这完全在同一台机器上完成,但我无法将子进程的输出显示在psexec中。由于这在构建服务器上运行,我不希望将输出重定向到文件等

以下是一个不起作用的示例调用:

C:\>PsExec.exe cmd.exe -i 1 -u user -p pwd /C echo foo

结果显示没有任何“foo”

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

cmd.exe exited with error code 0.

有一件事是有效的,但目前没用,就是省略-i并添加\\localhost

C:\>PsExec.exe  \\localhost cmd.exe  /C echo foo

返回:

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com


foo
cmd.exe exited on localhost with error code 0.

但是当我指定会话1时,它会中断。这样:

C:\>PsExec.exe cmd.exe -i 1 -u user -p pwd \\localhost /C echo foo

再次显示我没有foo

再次:意图不是tee或将echo foo重定向到某个文件,然后执行type myfile.log作为第二步,但是要接收原始psexec中的输出。

由于我们需要Direct 3D上下文,因此配置了“允许与桌面交互”的服务在这里没有帮助,我们将被绑定到会话1。

1 个答案:

答案 0 :(得分:2)

我不认为你所要求的是可能的。 psexec -i以交互方式在远程计算机上运行该进程,因此包括控制台I / O在内的所有内容都发生在远程计算机上的相应会话中。

-i行为确实有意义。例如,假设您运行了一个需要用户输入的批处理文件,例如有一个pauseset /p。使用-i时,需要在目标计算机上输入输入,而不是在运行psexec的计算机上输入。同样,输出(仅)到远程机器。

问题的另一部分是psexec \\localhostpsexec之间没有计算机名称的区别。这个似乎是一个未记载的psexec怪癖,之前已被注意到并报告过,例如(在行之间有一点读数)Redirect output of process started locally with PSExec