Вот мой скрипт, в основном он обновляет сервис, все работает нормально до последней проверки статуса после Start-Sleep 25
. Он продолжает вытягивать первый статус, который он получил (у меня есть несколько статусов проверки в этом скрипте, и он использует первый статус вместо его повторной проверки).
Например, если служба находится в автономном режиме и будет использовать первый автономный статус, полученный при первой проверке, и отобразить его после включения службы. Есть ли способ показать, что сценарий перепроверяет статус и отображает его вместо использования первого?
$services = "RTCRGS"
$SvrName = 'CORPxxxx.xxxx.xxxx'
Get-Service -ComputerName $SvrName -Name $services | % {
Write-host "$($_.Name) on $SvrName is $($_.Status)"
if ($_.Status -eq 'stopped') {
Write-Host "Starting $($_.Name) in 5 sec..."
Start-Sleep 5
Write-Host "$($_.Name) is Starting, please wait..."
$_.Start()
Write-Host "Checking status of service, please wait for 25 sec..."
Start-Sleep 20
Write-Host "$($_.Name) on $SvrName is $($_.Status)"
} elseif ($_.Status -eq 'running') {
Write-Host "Restaring $($_.Name) in 5 sec..."
Start-Sleep 5
$_.Stop()
Start-Sleep 5
Write-Host "$($_.Name) is Starting, please wait..."
$_.Start()
Write-Host "Checking status of service, please wait for 25 sec..."
Start-Sleep 25
Write-Host "$($_.Name) on $SvrName is $($_.Status)"
}
}
@Ansgar Wiechers Есть какие-нибудь предложения о том, как я могу это сделать? Любой пример будет очень признателен
Разумеется, перезапустите Get-Service
, например Get-Service -ComputerName ... | Select-Object -Expand Status
@Ansgar Wiechers Следует добавить его после elseif? или еще где-нибудь. Извините, я новичок в PowerShell.
Вам нужно запустить это везде, где вы хотите вывести обновленный статус.
Я считаю, что в этой ситуации проще всего определить команду, а затем вызывать ее при необходимости: Определите это в начале вашего скрипта $ RetrieveServiceStatus = {(get-service -computername $ SvrName -name $ _. Name) .status} Затем каждый раз вам нужно проверить статус в вашей структуре If..Then..Else, вы можете использовать Invoke-Command $ RetrieveServiceStatus
После оператора start-sleep 20 выполните новую службу get для обновления статуса.
Статус не обновляется динамически. Он показывает статус на момент запроса. Вам нужно повторно запросить, чтобы получить обновленный статус.