Я пишу сценарий PowerShell, который постоянно проверяет статус игрового сервера, который я запускаю, и, в зависимости от состояний определенных exe и переменных, некоторые вещи произойдут. То, как я построил это, - это, во-первых, запуск таймера, и у меня есть цикл while, который срабатывает до тех пор, пока таймер не достигнет 280 секунд. Внутри цикла while есть ряд операторов if, а не else, которые смотрят на все вышеупомянутые переменные и состояния exe, а затем выполняют разные вещи. Я бы хотел, чтобы при завершении условия (если exe не найден, а статус сервера равен 0), напишите мне об этом, а затем вернитесь к началу всего цикла while
и сохраните зацикливание и проверка состояния сервера.Оставьте, если цикл внутри цикла
Вот скрипт прямо сейчас:
//$serverStatus = 1 means servers up, 0 means down, 3 means crashed
$timeout = new-timespan -Seconds 280
$sw = [diagnostics.stopwatch]::StartNew()
while ($sw.elapsed -lt $timeout){
Start-Sleep -Seconds 10
if (((get-process $process -ea SilentlyContinue) -eq $Null) -And ($serverStatus -eq "1")) {
#Server is down and email
"0" > "D:\Ark Scripts\serverStatus.txt"
Write-Host "it's down - email"
sendMail -sendTo "my email" -emailBody "Ark Server is down."
} elseif (((get-process $process -ea SilentlyContinue) -eq $Null) -And ($serverStatus -eq "0")) {
#Server is down and we are aware
Write-Host "it's down - we know"
} elseIf (((get-process $process -ea SilentlyContinue) -ne $Null) -And ($serverStatus -eq "0")) {
#Server is up and email
"1" > "D:\Ark Scripts\serverStatus.txt"
Write-Host "it's up - email"
sendMail -sendTo "my email" -emailBody "Ark Server is back up."
} elseif ($serverStatus -eq "3") {
Send-RCON "listplayers" > "D:\Ark Scripts\RCONlog.txt"
$log = Get-Content "D:\Ark Scripts\RCONlog.txt"
if ($log -eq "Authentication failed!") {
Write-Host "crashed and we know"
} else {
"1" > "D:\Ark Scripts\serverStatus.txt"
Write-Host "Back up"
}
} else {
#Checks RCON connection for crashes and sends crash email if connection fails.
Send-RCON "listplayers" > "D:\Ark Scripts\RCONlog.txt"
$log = Get-Content "D:\Ark Scripts\RCONlog.txt"
if ($log -eq "Authentication failed!") {
Write-Host "crashed"
"3" > "D:\Ark Scripts\serverStatus.txt"
sendMail -sendTo "my email" -emailBody "Ark Server has crashed."
return
} else {
"1" > "D:\Ark Scripts\serverStatus.txt"
Write-Host "it's up"
}
}
}
Exit-PSSession
Я просто хочу, чтобы это в то время как петля продолжать работать через каждые 10 секунд, чтобы проверить состояние переменных и найден ли ех и постоянно цикл.
«Возвратитесь к началу цикла while». = 'continue' –
Вы должны ввести вас в« Switch ». «Get-Help about_switch» буквально говорит, что это краткое описание «Объясняет, как использовать переключатель для обработки нескольких операторов If». – TheMadTechnician
@ MathiasR.Jessen Я пробовал использовать продолжение, но это тоже не работает. Я добавляю продолжение в ту часть, где найден exe, и serverStatus равен 0. Он устанавливает эту переменную в 1, а затем отправляет мне по электронной почте, но когда она возвращается к вершине, она возвращается к exe, и serverStatus равен 0, когда она должна переходите к exe, и serverStatus равен 1. Кажется, что он снова не проверяет параметры, а снова и снова запускает один и тот же кусок кода. – user1895377