Перезапустите сервис PowerShell, если не удалось
У меня есть проблема, что служба не работает без остановки. Это означает, что статус отображается как работающий, но...
Тем не менее - я написал небольшой (абсолютный Beginner(!)-)Powershell-Script, чтобы проверить, не произошло ли сбой приложения, но как мне продолжить?
Если скрипт находит запись в журнале событий, он должен остановиться и запустить службу.
Clear-Host
$timetocheck = [DateTime]::Now.AddMinutes(-10)
$eventid = "10016"
$log = "System"
$app = "SID"
$check = "Get-WinEvent -LogName $log | Where-Object {($_.TimeCreated -ge $timetocheck) -and ($_.id -eq $eventid) -and ($_.Message -Like *$app*)}"
редактировать
просто для ясности -
если этот фрагмент не находит ничего в журнале событий, ничего не должно произойти.
если этот фрагмент находит хотя бы 1 ошибку в журнале событий, служба должна быть остановлена и перезапущена.
другими словами - если процесс завис, перезапустите, иначе ничего не делайте
Спасибо
2 ответа
Хорошо - теперь я могу ответить на свой вопрос..;)
Это работает:
Clear-Host
$timetocheck = [DateTime]::Now.AddMinutes(-30)
$eventid = "10016"
$log = "System"
$app = "SID"
$checking = Get-WinEvent -FilterHashtable @{Logname="$log";ID="$eventid" ;StartTime="$timetocheck"}|`
Where-Object {$_.Message -like "*$app*"}
if ($checking -like "*") {ReStart-Service -Name DistributedCOM -Force}
Хитрость - это $ * -подобный "*". Я не удовлетворен полностью, потому что это "только" проверяет, отвечает ли Get-Winevent хотя бы один знак. Я бы предпочел поискать строку, которую я знаю....
Когда проверяемая строка короче, она работает с определенной строкой....
Однако - это работает. И это важно. А может, кому-то еще это нужно.
спасибо всем
отредактируй и первый улучши....
команда Get-WinEvent -FilterHashtable @ {Logname = "$ log"; ID = "$ eventid"; StartTime = "$ timetocheck"} | Where-Object {$ _. Подобный сообщению " $ app "} занимает 0,7 секунды
команда Get-WinEvent $ log | Where-Object {($ .TimeCreated -ge $ timetocheck) -and ($.id -eq $ eventid) -and ($ _. Message -Like " $ app ")} занимает 4,2 секунды
так что я изменил это
Попробуйте это с помощью следующего кода
Clear-Host
$timetocheck = [DateTime]::Now.AddMinutes(-10)
$eventid = "10016"
$log = "System"
$app = "SID"
$check = Get-WinEvent -LogName $log | Where-Object {($_.TimeCreated -ge $timetocheck) -and ($_.id -eq $eventid) -and ($_.Message -Like "*$app*")}
if ($check -ne $null)
{
Restart-Service -Name YourService -Force
}