Есть ли команда PowerShell, чтобы сказать PS не ждать запуска службы, прежде чем продолжить? - PullRequest
0 голосов
/ 11 июля 2019

Powershell ожидает запуска или остановки службы, прежде чем она перейдет к следующей строке в сценарии, но мне нужно, чтобы она продолжалась без ожидания.

Идея заключается в том, что нам нужно запускать и останавливать несколько сервисов на нескольких серверах, и если мы ожидаем, что каждый сервис запустится последовательно, для запуска полного сценария может потребоваться несколько часов.

Все, что я видел в Интернете, - это то, что PowerShell нужна команда, которая заставляет его ждать, но мой опыт показывает, что PS будет ждать службы без получения какой-либо явной команды.

Write-host "Starting services..."

## Remote Start XXX services
   Write-Host "Starting XXX services..."
   Get-Service -Name ServiceXXX -ComputerName computerXXX | Start-service
   Get-Service -Name ServiceXXX -ComputerName computerYYY | Start-service
   Get-Service -Name ServiceXXX -ComputerName computerZZZ | Start-service

## Remote Start YYY services
   Write-Host "Starting YYY services..."
   Get-Service -Name ServiceYYY -ComputerName computerAAA | Start-service
   Get-Service -Name ServiceYYY -ComputerName computerBBB | Start-service
   Get-Service -Name ServiceYYY -ComputerName computerCCC | Start-service

В идеалеЯ хочу, чтобы код выполнялся таким образом, чтобы ServiceXXX на компьютере YY не ожидал ServiceXXX на компьютере XXX и т. Д. Для каждой службы.

Внутри сценария у меня есть параметры для запуска, остановки и проверки.Мы не беспокоимся о проверке системы до ее продолжения.

В данный момент PS запустит «Ожидание запуска ServiceXXX ...» и будет повторять это сообщение в течение 30 или 40 секунд.Затем он переходит к следующей строке.Вы можете понять, почему это займет очень много времени, когда мы начнем говорить о десятках удаленных серверов и десятках сервисов на каждом.

1 Ответ

0 голосов
/ 11 июля 2019

Используйте powershell jobs для запуска задач в фоновом режиме. Когда вы сбросили их все, вы можете дождаться их завершения. Примерно так:

$jobs = @()
Write-host "Starting services..."

## Remote Start XXX services
   Write-Host "Starting XXX services..."
   $jobs += Start-Job {Get-Service -Name ServiceXXX -ComputerName computerXXX | Start-service}
   $jobs += Start-Job {Get-Service -Name ServiceXXX -ComputerName computerYYY | Start-service}
   $jobs += Start-Job {Get-Service -Name ServiceXXX -ComputerName computerZZZ | Start-service}

## Remote Start YYY services
   Write-Host "Starting YYY services..."
   $jobs += Start-Job {Get-Service -Name ServiceYYY -ComputerName computerAAA | Start-service}
   $jobs += Start-Job {Get-Service -Name ServiceYYY -ComputerName computerBBB | Start-service}
   $jobs += Start-Job {Get-Service -Name ServiceYYY -ComputerName computerCCC | Start-service}

#Now wait for them to complete
Wait-Jobs $jobs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...