2015-12-08 6 views
1

Я пишу сценарий 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 секунд, чтобы проверить состояние переменных и найден ли ех и постоянно цикл.

+1

«Возвратитесь к началу цикла while». = 'continue' –

+4

Вы должны ввести вас в« Switch ». «Get-Help about_switch» буквально говорит, что это краткое описание «Объясняет, как использовать переключатель для обработки нескольких операторов If». – TheMadTechnician

+0

@ MathiasR.Jessen Я пробовал использовать продолжение, но это тоже не работает. Я добавляю продолжение в ту часть, где найден exe, и serverStatus равен 0. Он устанавливает эту переменную в 1, а затем отправляет мне по электронной почте, но когда она возвращается к вершине, она возвращается к exe, и serverStatus равен 0, когда она должна переходите к exe, и serverStatus равен 1. Кажется, что он снова не проверяет параметры, а снова и снова запускает один и тот же кусок кода. – user1895377

ответ

0

Это не будет работать, сценарий никогда не будет идти в раздел «#server вверх и электронная почта никогда не будет»

} 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 

Вы должны гнездо вашей, если заявления, чтобы получить четкую картину того, что вы делаете

Смежные вопросы