使用PSEXEC从Hudson服务器在远程计算机上运行批处理文件

3
我是一名新手,使用Hudson和PSEXEC,我正在我的电脑上使用Hudson,希望从Hudson构建中运行远程计算机上的批处理文件。我使用PSEXEC在远程计算机上运行批处理文件,当我从命令提示符中执行时,它可以成功运行。但是当我从Hudson构建中运行时,它卡住了...什么也没做。请给出任何建议,是否有其他方法可以处理这个问题。
我希望能够快速解决这个问题...非常紧急。感谢您的帮助。
4个回答

2

可能是psexec在等待用户输入,如果是这种情况,Hudson将会挂起。

Hudson是否使用您的用户凭据运行?如果没有,请使用Hudson正在运行的凭据启动命令提示符,并查看调用psexec时会发生什么。如果Hudson在本地系统帐户上运行,则无法使用它启动命令提示符。然后尝试使用您的凭据运行Hudson并查看会发生什么。

顺便问一下,您是否检查过Hudson的日志文件(以防万一有什么东西)?


1
谢谢Peter,它对我有用。 实际上问题是远程机器中的批处理文件有一个.vbs文件要执行,我已经添加了wscript来执行它,然后它就可以工作了。 - vishu

0

我曾经遇到过PSEXEC卡住的问题。

在长时间的搜索后,我找到了解决方案,即在调用PSEXEC时添加参数-accepteula。之后,Hudson就不再卡住了。

这真是令人沮丧。


0

我想回应一下这个问题,因为我在使用TeamCity和psExec时也遇到了同样的卡顿问题。由于我认为这实际上是Java执行psexec时出现的问题,所以在Hudson的情况下也应该适用。

虽然我早期遇到了accepteula问题,但您只需要同意一次并设置一个注册表设置即可。如user327759所示,在脚本中使用-accepteula开关可以覆盖您的基础,并且永远不会再次出现。

如果这不能解决您的问题,就像在我的情况下一样,您需要添加"-i"命令开关。例如:psexec -i \ServerName "C:\folder\file.bat"

为了说明这个解决方案的背景,我包括了我的故事:

我能够通过MsBuild任务、.Net包装器和直接命令提示符使用成功执行此PsExec命令,但是TeamCity在执行时会卡住。似乎Java在调用psexec exe时期望在标准输入上得到一些响应。在远程服务器上,我会看到psexecsvc进程启动并适当地在服务控制台中注册,但然后它就会停止。在阅读了许多帖子(例如这篇),并且挣扎了比我愿意承认的时间之后,我最终尝试了-i选项,尽管在TeamCity之外的任何其他执行场景中都不需要它。psexec文档指出,-i将“以与远程系统上指定会话的桌面交互方式运行程序。如果未指定会话,则该进程在控制台会话中运行。”目前仍不清楚为什么这对于TeamCity如此重要。

0

也许现在已经有点晚了,但我想为其他遇到同样问题的人发布这篇文章。

Psexec在任何CI服务器上运行时都会出现问题,无论你使用的是Hudson、Teamcity等哪种CI服务器。 当从构建服务器运行Psexec时,它会挂起。 并非所有命令都会挂起,但对于某些命令,Psexec将会挂起。 问题在于Psexec如何读取远程运行命令的输出。 最终的解决方案是使用除Psexec之外的其他工具。 您可以查看此解决方案的博客。 但如果您需要一个更简单的解决方案,并且不关心命令的输出,我想到了一个简单的解决方案,即抑制Psexec的输出。 您可以编写一个小的C#程序来运行Psexec命令,抑制其输出。

我在这里发表了相关博客


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接