使用 PSExec 在本地启动进程的重定向输出

ygo*_*goe 7 psexec

我在测试机环境中使用 PSExec 以管理员身份启动要测试的应用程序的安装包,然后在需要时以管理员身份运行测试。PSExec 仅用于此处的“run as”部分,不用于远程执行。调用如下所示:

c:\psexec -u Administrator -p adminpassword -w C:\SystemTests C:\SystemTests\run_system_tests.cmd ...

问题是我们的 CI 服务器 Jenkins 只在控制台输出中捕获了 PSExec 的标志,而不是实际的测试打印输出:

PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

C:\SystemTests\run_system_tests.cmd exited with error code 0.
Run Code Online (Sandbox Code Playgroud)

启动的脚本在本地打开自己的控制台窗口并打印其中的所有内容。但是它没有登录 Jenkins,所以我们不知道脚本做了什么以及为什么事情可能会失败。

是否有一个选项可以让 PSExec 将启动程序的输出打印到标准输出而不是徽标,而不是打开控制台窗口?

Tuf*_*wer 5

在研究这个确切的问题时,我遇到了这个technet 论坛帖子

线程中的相关帖子:

由用户bnyffele在 sysinternals 上发帖

我实际上发现各个系统之间没有区别,但取决于你如何寻址远程机器:

psexec \\hostA cmd        -> seperate window opens (if command is executed on \\hostA)
psexec \\127.0.0.1 cmd    -> cmd prompt in same window
psexec \\[IP address] cmd -> cmd prompt in same window
psexec \\localhost cmd    -> results in error message about localhost being a duplicate name.
psexec \\hostA.domain.com -> cmd prompt in same window
Run Code Online (Sandbox Code Playgroud)

因此,当我为本地计算机执行 psexec 并且使用短主机名时,我似乎只得到一个单独的窗口。

看起来,如果您指定本地主机 IP 地址作为运行命令的计算机,您将获得输出。我自己测试了这一点,虽然它没有实时打印标准输出,但在脚本完成时确实将其全部打印到同一个终端。

如果您试图弄清楚如何使用系统名称而不是 IP 地址来执行此操作,您仍然可以通过在主机名末尾添加一个点来使其工作,该主机名是由另一个用户稍后在同一线程中发布的多个帖子确定的。

由用户bluechipps在 sysinternals 上发帖

事实上,我刚刚发现了一种几乎无痛的解决方法。您所要做的就是添加一个“.” 在短名称之后,它仍然具有相同的功能,但随后会正确输出到同一个 cmd 窗口!注意差异。


PS C:> psexec \hal ipconfig

PsExec v1.95 - 远程执行进程
版权所有 (C) 2001-2009 Mark Russinovich
Sysinternals - www.sysinternals.com

ipconfig 退出,错误代码为 0。
PS C:>


PS C:> psexec \hal. ip配置

PsExec v1.95 - 远程执行进程
版权所有 (C) 2001-2009 Mark Russinovich
Sysinternals - www.sysinternals.com

Windows IP配置

以太网适配器本地连接 2:

连接特定的 DNS 后缀。:#####
链路本地 IPv6 地址。。。。。:#####
IPv4 地址。。。。。。。。。。。:#####
子网掩码 。。。。。。。。。。。:#####
默认网关 。。。。。。。。。:#####

ipconfig 在 hal 上退出。错误代码为 0。
PS C:>



Ste*_*veC 4

我发现您可以通过这种方式将 PsExec 输出从远程输出中分离出来......

psexec \\wxesbbtlkS02 cmd /c C:\test.bat >tmpfile.txt 2>other.txt
Run Code Online (Sandbox Code Playgroud)

这样你就可以在文件中获得 PsExec 输出other.txt,并在tmpfile.txt