Powershell - перезагрузите удаленный сервер Windows с помощью встроенной проверки - PullRequest
0 голосов
/ 10 сентября 2018

Я пытался создать сценарий powershell, который перезапускает удаленную службу Windows. До сих пор это работало нормально, но я бы хотел встроить систему проверки.

Пока служба останавливается и запускается снова нормально, но, учитывая, что она работает на производственном компьютере, нам нужна дополнительная проверка:

function setStatusOfService {
    for ($service)
    {
        $serviceinfo3 = Get-Service $service -ComputerName $Computer1

        if ($serviceinfo3.Status -eq 'Running')
        {
            Get-Service -Name $Service1 -ComputerName $Computer1 | Stop-Service
            GetStatusOfService $service -ComputerName $Computer1
            Start-Sleep -Seconds 10
        }
        else
        {
            Get-Service -Name $Service1 -ComputerName $Computer1 | Start-Service 
            GetStatusOfService $service -ComputerName $Computer1       
            break
        }

    }
    exit
}

Это работает довольно хорошо. Но я попытался сделать так, чтобы функция продолжала пытаться запустить службу, когда она не работает, но безрезультатно.

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

Function getStatusOfService {
    $serviceinfo = Get-Service $service -ComputerName $Computer1
    Write-Host $service is $serviceinfo.Status
    SendEmail
}

Но то, что я до сих пор не могу получить, это то, что он должен отправлять электронную почту только тогда, когда статус остановлен. Я пробовал несколько вариантов, таких как Status -eq "stopped", но он все равно отправляет электронное письмо.

Может кто-нибудь дать мне совет, как мне это встроить?

С уважением,

Рик.

1 Ответ

0 голосов
/ 10 сентября 2018

Я не уверен, чего вы пытаетесь достичь, но проверка службы и отправка почты, когда она остановлена, должна работать следующим образом:

$service = Get-Service "servicename" -ComputerName "Computer"
if($service.status -eq "Stopped"){
     Send-Mailmessage -to "it@it.com" -from "computer@it.com" -Subject "Stopped Service" -Body "Service $service.name stopped."
}

Если вы хотите постоянно проверять это, вы можете использовать запланированное задание для запуска сценария несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...