Мой статус не обновляется, и он продолжает изменяться с предыдущего статуса

Вот мой скрипт, в основном он обновляет сервис, все работает нормально до последней проверки статуса после 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 10.08.2018 16:21

@Ansgar Wiechers Есть какие-нибудь предложения о том, как я могу это сделать? Любой пример будет очень признателен

Sammy90 10.08.2018 16:23

Разумеется, перезапустите Get-Service, например Get-Service -ComputerName ... | Select-Object -Expand Status

Ansgar Wiechers 10.08.2018 16:26

@Ansgar Wiechers Следует добавить его после elseif? или еще где-нибудь. Извините, я новичок в PowerShell.

Sammy90 10.08.2018 16:29

Вам нужно запустить это везде, где вы хотите вывести обновленный статус.

Ansgar Wiechers 10.08.2018 16:36

Я считаю, что в этой ситуации проще всего определить команду, а затем вызывать ее при необходимости: Определите это в начале вашего скрипта $ RetrieveServiceStatus = {(get-service -computername $ SvrName -name $ _. Name) .status} Затем каждый раз вам нужно проверить статус в вашей структуре If..Then..Else, вы можете использовать Invoke-Command $ RetrieveServiceStatus

Scepticalist 10.08.2018 16:38
0
6
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После оператора start-sleep 20 выполните новую службу get для обновления статуса.

Другие вопросы по теме