Powershell - перезапустите удаленный сервер windows со встроенной проверкой

Я пытался создать сценарий 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", но он все равно отправляет электронную почту.

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

С уважением,

Рик.

Ваш цикл for кажется выключенным. Чего вы там пытаетесь достичь? Цикл for выглядит так: For ($ i = 0; $ i -le 10; $ i ++). Если вы собираетесь использовать бесконечный цикл (чего не следует делать imho), используйте while ($ true).

Tom 10.09.2018 16:17
1
1
40
1

Ответы 1

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

$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."
}

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

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

Я не могу вставить или вставить изображения с рабочего стола в тело почты outlook
Не удается подключиться к виртуальной машине azure по протоколу rdp после изменения, а затем возврата ip-правил
Перенос (или использование) старого vhd на классической учетной записи хранения для использования с новой (не классической) виртуальной машиной
Запустить selenium webdriver через powershell на ubuntu?
Как раскрасить конкретное значение переменной в теле письма в сценарии powershell
Предоставьте aks доступ к acr с помощью командлетов powershell arm
Как отфильтровать определенные задачи с помощью get-scheduletasks из планировщика задач удаленного компьютера
Powershell заменяет специальные символы
Я пытаюсь вставить изображения с рабочего стола в тело почты outlook с помощью сценария powershell, почта отправляется, но изображения не поступают в тело почты
Данные csv из powershell export-csv содержат предложение выбора в первой строке