gpt4 book ai didi

batch-file - PsExec 和无效句柄

转载 作者:行者123 更新时间:2023-12-04 01:10:39 24 4
gpt4 key购买 nike

我正在尝试使用 Windows 批处理脚本,该脚本使用 PsExec 在远程计算机上执行命令。定期它有“无效句柄”,然后脚本失败。

脚本没有改变,或者确实没有改变任何一台机器。

有谁知道为什么会发生这种情况,因为有时脚本可以顺利运行。

或者,有人知道如何使用更可靠的技术在机器上作为该机器的本地用户运行脚本。

PS 有时第一个PsExec工作和其他人失败。

编辑

脚本刚刚上线(除了设置适当的变量)

 PsExec %HOSTNAME% -I -u %USERNAME% -p %PASSWORD% CMD /C RMDIR /S /Q e:\SomeDir

这有时有效,但有时会因“无效句柄”而失败

最佳答案

您需要调试情况。

你有一个脚本,然后一些东西(什么是 Jenkins?)在远程 PC 上启动它,有时它可以工作,有时它会失败。

它是确定性的吗?
当它失败时,它总是失败吗?
它是如何失败的?

您需要更好地了解脚本如何/何时失败。

为了更好地理解这些失败,我将采取以下措施。

您可以多次运行脚本吗?
从评论来看,您似乎每小时运行一次脚本,您可以连续运行 3/4/5 次,每小时运行一次吗?
这将帮助您确定它是如何失败的:如果您运行 5 次,它是否每次都有效?它失败了,它是否连续失败了 5 次?

你可以尝试使用不同的脚本吗?
您可以创建一些更相似但更简单的脚本。
因此,您可以使用 RMDIR 尝试您的脚本,然后是另一个带有简单 DIR 命令的脚本(只是为了确定脚本启动/连接机制是否有效),然后是另一个带有简单 ECHO 命令的脚本(因此它不需要访问任何文件/文件夹)

在本地 PC 上运行调试脚本
然后,您可以同时运行在本地 PC(不是需要执行 RMDIR 的远程 PC)上运行的其他脚本,这些脚本尝试使用 PING 访问远程 PC,或通过从/向网络共享复制文件...

嗅探网络
您甚至可以设置一个 Wireshark 实例来记录两台 PC 之间发送的所有数据包,这有助于分析/排除网络问题。

您显然需要跟踪/记录所有内容。

有了这种信息,也许您/我们可以更好地了解问题所在。

======================================

更新 1 - 记录一些日志

======================================

也许您可以尝试使用以下修改后的脚本来获取一些日志文件。
这些脚本将创建 2 个日志文件,一个在远程 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 参数吗?在我的电脑上,如果我使用/I 参数,它就不起作用...
psexec %HOSTNAME% -u %USERNAME% -p %PASSWORD% CMD /C "RMDIR /S /Q e:\SomeDir >>c:\RemoteComputer.log 2>&1" >>c:\LocalComputer.log 2>&1

在我的 PC 上进行了一些测试后,我看到 PsExec 在远程 PC 上安装了一个服务来远程运行命令。 (它称为 PsExecSvc.exe,安装在我用于此测试的 WinXP PC 上的 c:\windows\中)
远程安装/卸载这个用于命令执行的临时服务肯定是产生错误的可能“故障点”之一。
如果是这种情况,那么您应该能够通过查看 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 here 的说明)

关于batch-file - PsExec 和无效句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22538513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com