我们需要从会话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。
答案 0 :(得分:2)
我不认为你所要求的是可能的。 psexec -i
以交互方式在远程计算机上运行该进程,因此包括控制台I / O在内的所有内容都发生在远程计算机上的相应会话中。
-i
行为确实有意义。例如,假设您运行了一个需要用户输入的批处理文件,例如有一个pause
或set /p
。使用-i
时,需要在目标计算机上输入输入,而不是在运行psexec
的计算机上输入。同样,输出(仅)到远程机器。
问题的另一部分是psexec \\localhost
和psexec
之间没有计算机名称的区别。这个似乎是一个未记载的psexec
怪癖,之前已被注意到并报告过,例如(在行之间有一点读数)Redirect output of process started locally with PSExec。