我正在尝试使用使用PsExec在远程计算机上执行命令的windows批处理脚本。它周期性地有“无效句柄”,然后脚本就失败了。
脚本没有改变,甚至没有改变任何一台机器。
有谁知道为什么会这样,因为有时脚本运行时没有问题。
或者,是否有人知道如何以更可靠的技术在机器上作为本地用户运行脚本。
PS有时第一个PsExec工作,而其他PsExec失败。
编辑
脚本只是在线的(除了设置适当的变量)
PsExec %HOSTNAME% -I -u %USERNAME% -p %PASSWORD% CMD /C RMDIR /S /Q e:\SomeDir这有时有效,但有时在“无效句柄”中失败。
发布于 2014-04-04 09:44:22
您需要调试这种情况。
你有剧本,然后是什么(詹金斯是什么?)在远程PC上启动它,有时工作,有时失败。
这是决定性的吗?
当它失败时,它总是失败吗?
怎么会失败呢?
您需要更好地了解脚本如何/何时失败.
以下是我要做的,以收集更好的理解这些失败。
你能多次运行脚本吗?
从注释中可以看出,您似乎每小时运行一次脚本,是否可以连续运行3/4/5次,每小时运行一次?
这将帮助您确定它是如何失败的:如果您运行了5次,它是否每次运行?它失败了,它连续5次失败了吗?
你能尝试使用不同的脚本吗?
您可以创建一些更相似但更简单的脚本。
因此,您可以使用RMDIR尝试您的脚本,然后使用一个简单的DIR命令(只为了查看脚本启动/连接机制是否有效)的另一个脚本,然后使用一个简单的ECHO命令(因此它不需要访问任何文件/文件夹)
在本地PC上运行调试脚本。
然后,您可以同时运行在本地PC上运行的其他脚本(而不是需要执行RMDIR的远程脚本),这些脚本试图通过PING访问远程PC,或者通过将文件从/复制到网络共享.
嗅探网络
您甚至可以设置一个Wireshark实例来记录2 PC之间发送的所有数据包,这有助于分析/排除网络问题。
显然需要跟踪/记录一切。
有了这类信息,您/我们就可以更好地了解问题所在。
=====================================
更新1-记录一些日志
=====================================
也许您可以尝试使用以下修改过的脚本来拥有一些日志文件。这些脚本将创建两个日志文件,一个在远程PC上(包含远程执行命令的消息),一个在本地PC上(包含来自PsExec的任何消息)。
(您需要调整保存日志文件的路径)
psexec %HOSTNAME% -I -u %USERNAME% -p %PASSWORD% CMD /C "RMDIR /S /Q e:\SomeDir >>c:\RemoteComputer.log 2>&1" >>c:\LocalComputer.log 2>&1或者下一个没有/I的
您确定需要CMD的/I参数吗?在我的Pc上,如果我使用/I参数.
psexec %HOSTNAME% -u %USERNAME% -p %PASSWORD% CMD /C "RMDIR /S /Q e:\SomeDir >>c:\RemoteComputer.log 2>&1" >>c:\LocalComputer.log 2>&1在我的个人电脑上进行了一些测试之后,我看到PsExec在远程PC上安装了一个服务来远程运行这个命令。(它名为PsExecSvc.exe,安装在c:\ WinXP \用于测试的WinXP PC上)
远程安装/卸载用于执行命令的临时服务肯定是生成错误的“失败点”之一。
如果是这样的话,那么您应该能够通过查看LocalComputer.log来跟踪它,它将包含来自PsExec的消息/错误。
正如我在前面的建议中所述,我也会尝试安排更简单的脚本,例如
psexec %HOSTNAME% -u %USERNAME% -p %PASSWORD% CMD /C "dir c:\ >>c:\RemoteComputerDir.log 2>&1" >>c:\LocalComputerDir.log 2>&1和
psexec %HOSTNAME% -u %USERNAME% -p %PASSWORD% CMD /C "echo SuperEchoTest >>c:\RemoteComputerEcho.log 2>&1" >>c:\LocalComputerEcho.log 2>&1===================================
更新2-尝试使用WMI
===================================
您可以使用WMI尝试运行远程命令。
wmic /node:%HOSTNAME% /user:%USERNAME% /password:%PASSWORD% process call create "CMD /C RMDIR /S /Q e:\SomeDir"当您使用WMI时,需要确保windows防火墙没有阻塞您的命令。(当我尝试使用WMIC运行远程命令时,windows防火墙通知在我的Win 7 PC上弹出)
(我有使用WMIC 这里的指示)
发布于 2014-04-04 21:09:54
是的,在远程计算机上执行命令有一种更可靠的技术,称为powershell。例如,您可以运行:
test-connection -computername server01, server02, server12从本地计算机到多台远程计算机的调用。
另一个非常有用的命令是:
invoke-command -filepath c:\scripts\test.ps1 -computerName Server01在Test.ps1计算机上运行Server01脚本。
教程给出了关于如何在远程计算机上运行PowerShell命令的几个示例。
发布于 2014-04-08 21:55:40
可以找到一种模仿Linux世界并使用ssh的不同技术。它在集群中非常常见,我个人也曾在Windows 2008 R2中使用过它,所以我不认为windows 7会有任何不同。
此任务通常使用ssh和无密码公钥身份验证来执行。使用它,唯一需要的信息是远程服务器的IP和存储在服务器上的客户端的公钥:只有具有相应私钥的客户端才能连接到它(必须在客户机上用ssh-keygen创建密钥。将公钥复制到服务器)
服务器必须从外部访问TCP端口22,以防有防火墙、NAT、.
在我的例子中,我使用了Windows SUA中包含的ssh服务器,但我建议您忘记它们(实际上它们被废弃了,而且非常麻烦),并尝试使用OpenSSH 西格温服务器sshd --即使不是正式的微软,至少有一个支持它的大型社区--偶尔我也会可靠地使用它。
客户端ssh命令包括在SUA中,在cygwin中,或者您可以使用油灰,如果您想在客户机上使用一个轻量级的解决方案(并不是说cygwin很重--只是需要一种不需要的linux仿真)。
例如,我找到了这个职位,很好地解释了所需的步骤。
https://stackoverflow.com/questions/22538513
复制相似问题