我们需要生成从 session 0隔离到 session 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.

但是当我指定 session 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上下文,因此我们必须绑定(bind)到 session 1,因此在服务中配置“允许与桌面进行交互”并没有帮助。

最佳答案

我认为您的要求是不可能的。 psexec -i在远程计算机上以交互方式运行该进程,因此包括控制台I/O在内的所有操作均在远程计算机上的相应 session 中进行。

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

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

关于windows - PSExec不显示已启动子进程的输出(本地计算机),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35335778/

10-12 19:02