如何解决简单的 psExec 问题?

Ala*_*amb 5 pstools

在过去的几周里,我一直在互联网上搜索,以找出使用 psExec 在远程计算机上打开“计算器”时遇到的问题。最后我也在这里问了一个问题。我仍然没有这个问题的答案,但是获得这个问题的帮助变成了很多关于解决 psExec 问题的不同方法的来回答案和评论。我很感激我收到的帮助,所以我正在查看我得到的故障排除想法列表,并想 - 如果我可以搜索“troubleshoot psExec”并将此列表全部放在一个地方,那不是很好吗?而不是在大量不同的网站上挖掘一些有用的信息?

因此,考虑到这一点,并本着回答你自己的问题帖子的精神,我将列出我发现的所有故障排除方法,然后我会提出我的问题。我还不能添加很多链接,因为我是这个网站的新手,所以我对包含最少的信用和来源链接表示歉意。

  • \\targetmachine命令部分,尝试使用计算机名称或 IP 地址。有时,一个可以工作,而另一个可以工作。
  • 使用该-i开关使程序在远程计算机上交互。
  • 使用该-d开关,以便cmd在您正在执行的程序仍在运行时不会挂起。
  • 尝试运行您要运行的程序之外的简单程序(例如calccmd,或创建一个简单.bat文件来测试),以检查您的语法是否错误。
  • 使用类似的命令瞄准不同的计算机以查看该命令是否有效。
  • 如果您已经尝试过该-d切换,请运行您的程序并让它挂起一段时间,看看系统是否运行缓慢。有时某些程序会花费一些时间。
  • 运行其他 psTools,例如psListpsService来检查您是否有权访问远程计算机
  • 检查本地计算机是否可以访问目标计算机的另一种方法是打开 Windows 资源管理器窗口并在地址栏中键入:\\targetcomputername\c$。这将使您能够访问目标 C: 驱动器中的文件夹。
  • cmd以管理员身份运行
  • 使用用户名和密码开关(-u-p)。尝试使用您的常规帐户,然后尝试使用您的管理员帐户(如果您有的话)。
  • Accepteula 可以写成 和-accepteula-/accepteula显然一种方式适用于某些系统,另一种方式适用于其他系统。
  • 在命令中插入-accepteula两次,因为第一个命令有时会被“吞没”并且不会被执行(来自这篇文章)。
  • 通过远程连接或物理操作转到目标计算机,然后psExec在命令提示符下运行,以便您可以手动接受弹出的许可协议。(accepteula应该这样做,但显然有时不起作用)
  • 在目标计算机上手动运行 psExec 以查看是否是您的计算机存在问题。
  • 检查admin$目标计算机上的共享是否已打开
  • 按照此处Sysinternals 论坛中 karlchen 的帖子中适合您的 Windows 版本的指示进行操作,然后运行建议的 3 行代码。
  • 检查目标的防火墙或防病毒软件是否允许 psExec。
  • 如果可以,请关闭防火墙并重试该命令。
  • 对具有相同防病毒和防火墙设置的另一个目标尝试该命令,看看防火墙/防病毒是否是问题所在。
  • 尝试在目标计算机上将 UAC(用户帐户控制)设置为“从不通知”/关闭。
  • 如果您需要与自己不同的凭据,请尝试缓存您的凭据(来自这篇文章

psExec 下载页面以及 Sysinternals psExec 常见问题解答和论坛都是很好的资源。

我在这里写的这些故障排除想法都没有解决我的问题,所以这意味着还有更多的想法。还有什么办法可以解决像我这样的简单问题(只需打开一个简单的程序,如计算器)的 pExec 问题?

小智 0

A) \{目标机器}。 2015 年,我们将所有 *.bat 批处理文件更改为对 {targetmachine} 使用 IPAddress,而不是使用 ComputerName,这样就消除了调用 PsExec 时的“挂起”问题。2018 年,随着所有新的病毒安全措施到位,我们发现使用IPAddress 现在会导致 PsExec 挂起长达 3 分钟。因此,我们已将批处理文件切换回使用 ComputerName。

B) -p {密码}。我们中有 6 个人经常使用使用 PsExec 的批处理文件,并且我们的批处理文件被定制为使用我们的用户名和密码。在我们上次强制 3 个月的密码更新之后,我们意识到密码中没有特殊字符的用户(例如 @ ! ^ $)不再经历任何挂起时间,而那些具有特殊字符的用户经常经历 20 秒的挂起时间。(这很难排除故障,因为如果最近 3 分钟内未调用批处理文件,则具有特殊字符的用户只会经历 20 秒的挂起时间。如果最近运行过批处理文件,挂起时间就会消失。)

C)在任何 *.bat 批处理文件中使用@。同样,如果我们从任何调用 PsExec 或被 PsExec 调用的批处理文件中删除“@”字符,我们就会发现挂起时间就会消失(无论批处理文件运行后已经过了多长时间)。对于那些不熟悉 *.bat 文件编程的人来说,@ 字符会抑制屏幕上的“回显”,即使在批处理文件中将回显设置为“on”也是如此。

D)总结:2015 年代码

@echo off
@psexec \\199.245.27.107 -u DomainName\UserName -p MyP@$$W*rd  cmd.exe /k c:\local_PsExec_commands.bat "%cd%" %1 %2
Run Code Online (Sandbox Code Playgroud)

2018年代码

echo off
psexec \\TargetComputer -u DomainName\UserName -p MyPassWord  cmd.exe /k c:\local_PsExec_commands.bat "%cd%" %1 %2
Run Code Online (Sandbox Code Playgroud)

我们还从目标计算机上的所有“local_PsExec_commands.bat”文件中删除了“@”字符。