Это можно сделать с помощью командлета Restart-Service
с Powershell Remoting (через WinRM) с помощью Invoke-Command
. Обратите внимание, что хотя вы можете использовать конвейер, чтобы получить сервис с Get-Service
и направить его на Stop-Service
, Start-Service
или Restart-Service
, в этом нет особой необходимости, и вы можете не вызывайте их напрямую на удаленных серверах:
$Computer1 = Read-Host -Prompt 'Enter the computer name to check Sophos Services'
$Service1 = Read-Host -Prompt 'Enter the service needed to be restarted'
Write-Output "Restarting service ${Service1} on ${Computer1}"
Read-Host -Prompt "Press Enter to continue"
# Restart the service on the remote computer
Invoke-Command -ComputerName $Computer1 -ArgumentList @{ Service1 = $Service1 } -ScriptBlock {
Restart-Service -Name $args.Service1 -Force
}
Давайте сломаться Invoke-Command
-ComputerName
- Имя компьютера / сервера, на котором будет выполняться команда. По умолчанию ваша учетная запись должна быть в группе Administrators
или Remote Management Users
на сервере, к которому вы хотите подключиться. При необходимости вы можете указать альтернативные учетные данные с аргументом -Credential
. В качестве дополнительного бонуса вы можете передать массив компьютеров для запуска одного и того же ScriptBlock
за один раз.
-ArgumentList
- Массив аргументов для передачи в скрипт. ScriptBlock
не сможет разрешить ваши локальные переменные, когда он работает на удаленном компьютере. Обычно вы получаете доступ к каждой переменной как $args[0]
, $args[1]
и т. Д. В порядке, в котором передаются переменные. Мне нравится использовать трюк, который заключается в передаче хэш-карты именованных аргументов, чтобы вы могли получить к ним доступ в более удобочитаемое увлечение, например, как я использую $args.Service1
в ScriptBlock
ниже.
-ScriptBlock
- Это удаленный код, который вы собираетесь выполнить, лучше всего помещать в объект ScriptBlock
, который представлен кодом между двумя фигурными скобками {}
. В этом случае мы вызываем Restart-Service
на удаленном компьютере.
О Restart-Service
Командлет
Я упоминал ранее, что ваш пользователь должен быть хотя бы в группе Remote Management Users
на удаленном сервере, чтобы подключиться с помощью Powershell Remoting. Хотя это действительно так, в большинстве сред вам необходимо быть членом группы Administrators
на том же удаленном сервере, чтобы также управлять службами, включая запуск и остановку их. Таким образом, для того, чтобы это работало непрерывно, вам нужно быть администратором удаленного блока, на котором вы хотите перезапустить службу.