说来话长,但我需要创建一个 SQL 触发器,远程执行一个脚本,然后该脚本又远程执行另一个脚本(是的,我知道)。我正在使用 PowerShell。
我从最后开始:
Get-Service –Name “service” –ComputerName “Server2” | Set-service –Status Stopped
Get-Service –Name “service” –ComputerName “Server2” | Set-service –Status Running
这很好用。然后,将在触发器上执行的脚本:
Invoke-Command –computername “cluster” –command {d:\adminscripts\RestartServer2Service.ps1}
(是的,我使用 NLB 群集,它正在读取脚本)
但是,我得到了这个:
找不到服务名称为“service”的任何服务。
有什么想法吗?任何帮助都将不胜感激。谢谢
答案1
这几乎肯定是一个两跳问题。如果我使用 Enter-PSSession 连接到 ServerA,然后运行Get-Service spooler -ComputerName ServerB
,我会得到完全相同的“找不到任何具有服务名称的服务”错误。
但是,如果我运行Enter-PSSession ServerA -Authentication CredSSP -Credential (Get-Credential)
,则 Get-Service 命令可以正常运行。
问题在于第二跳——从第一台远程计算机到第二台(和第三台)远程计算机;对于 PS 远程使用的默认身份验证协议来说,这是一个“太远的桥”。我为这类问题使用的解决方案是 CredSSP。
您可以在以下位置找到有关该问题以及如何启用/使用 CredSSP 的更多详细信息这篇脚本专家文章。
答案2
-command
不是 的有效参数Invoke-Command
。请-FilePath
改用 来触发您的第二个脚本。
此外,请确保您拥有执行这些脚本的正确凭据。