我在测试机环境中使用 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.comipconfig 退出,错误代码为 0。PS
C:>
PS C:> psexec \hal.ipconfig
PsExec v1.95 - 远程执行进程
版权所有 (C) 2001-2009 Mark Russinovich
Sysinternals - www.sysinternals.comWindows 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