Это долгая история, но мне нужно создать триггер 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".
Есть предположения? Любая помощь будет оценена по достоинству. Спасибо
-command
не является допустимым параметром для Invoke-Command
. Использовать -FilePath
вместо этого для запуска вашего второго скрипта.
Кроме того, убедитесь, что у вас есть соответствующие учетные данные для выполнения этих сценариев.
Это почти наверняка проблема с двумя переходами. Если я использую Enter-PSSession для подключения к ServerA, а затем запускаю Get-Service spooler -ComputerName ServerB
, Я получаю ту же самую ошибку "не могу найти службу с именем службы".
Однако, если я убегу Enter-PSSession ServerA -Authentication CredSSP -Credential (Get-Credential)
, то команда Get-Service работает нормально.
Проблема заключается во втором переходе - переходе с первого удаленного компьютера на второй (и третий); это «слишком длинный мост» для протокола аутентификации по умолчанию, используемого удаленным взаимодействием PS. Решение, которое я использую для такого рода проблем, - CredSSP.
Вы можете найти более подробную информацию о проблеме и о том, как включить / использовать CredSSP в эта статья Scripting Guy.