我们需要生成从 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
行为确实有意义。例如,假设您运行了一个批处理文件,需要用户输入例如有一个pause
或set /p
。使用-i
时,需要在目标计算机上而不是在运行psexec
的计算机上输入输入。同样,输出(仅)将发送到远程计算机。
问题的另一部分是完全没有计算机名称的psexec \\localhost
和psexec
之间的区别。这似乎是一个未记录的psexec
怪癖,例如,在Redirect output of process started locally with PSExec上(在各行之间有一些读数),之前就已经注意到并报告了该怪癖。
关于windows - PSExec不显示已启动子进程的输出(本地计算机),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35335778/