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

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

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

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.

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

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

答案1

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

该主题中的相关帖子:

用户在 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

因此,当我为本地机器执行 psexec 并使用短主机名时,似乎只会出现一个单独的窗口。

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

如果您尝试弄清楚如何使用系统名称而不是 IP 地址来执行此操作,那么您仍然可以通过在主机名末尾添加一个点来使其工作,正如另一位用户在同一线程中稍后的几篇帖子中所确定的那样。

用户在 sysinternals 上发帖蓝筹股

实际上,我刚刚发现了一种几乎不费力的解决方法。您所要做的就是在简称后添加一个“。”,它仍将发挥相同的功能,但随后将正确输出到相同的 cmd 窗口!请注意差异。


注意:C:\psexec\hal ipconfig

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

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


PS C:> psexec \hal.ipconfig

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

Windows IP 配置

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

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

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


答案2

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

psexec \\wxesbbtlkS02 cmd /c C:\test.bat >tmpfile.txt 2>other.txt

因此,您可以在文件中获取 PsExec 输出other.txt,并在tmpfile.txt

答案3

如果使用插入符号 ^ 转义 > 字符,则可以将输出通过管道传输到文件。见下文。

c:\psexec -u 管理员 -p 管理员密码 -w C:\SystemTests C:\SystemTests\run_system_tests.cmd ^> outputfile.txt

相关内容