2015-04-15 4 views
0

У меня проблема с тем, что служба рушится без остановки. Это означает, что статус отображается как работающий, но ...перезапуск службы powershell, если не удалось

Однако - я написал небольшой (абсолютный Beginner (!) -) Powershell-Script, чтобы проверить, не разбилось ли приложение, но как мне нужно продолжить?

Если скрипт находит запись в Eventlog она Шоуда остановки и запуска службы ..

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*)}" 

редактировать

только уточнить -

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

Если этот фрагмент обнаружит хотя бы одну ошибку в журнале событий, служба должна быть остановлена ​​и перезапущена.

с другими словами - если процесс разбился перезагрузка еще не делают ничего

ТНХ

+0

жаль - в этот момент я понимаю, это не распространяется на логике ... i've судимого это: 'Clear-Host' ' $ timetocheck = [DateTime] :: Now.AddMinutes (-5000) '' $ EventID = "10016" '' $ лог = "System" '' $ приложение = «SID» ' ' # $ process = Блокнот процесса-процесса # PDTMScan * ' ' $ check = Get-WinEvent $ log | Where-Object {'' '($ _. TimeCreated -ge $ timetocheck) -and' ' ' ($ _. Id -eq $ eventid) -and '' '($ _. Message -Like" * $ app * ")}' '$ check | Out-File d: \ 111 \ checking.txt' '$ проверка -contains "$ EventID"' Это возвращает ** ложные ** –

+0

файл ** ** checking.txt выглядит следующим образом: _ ProviderName: Microsoft-Windows-DistributedCOM TimeCreated Id LevelDisplayName Сообщение ----------- ---------------- ------ - 16.04.2015 10:15:26 10016 Fehler Durch die Berechtigungseinstellungen (приложение) wird der SID (S-1 -..._ здесь я могу найти строку 10016 - почему она возвращает false? I ожидается здесь истинный .... –

ответ

1

Ну - теперь я могу ответить на мой собственный вопрос ..;)

Это работает:

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} 

The Trick - это $ check -like "*". Я не удовлетворен полностью, потому что это «только» проверяет, отвечает ли Get-Winevent хотя бы один знак. Я предпочел бы, чтобы искать строку я знаю ....

Когда строка для проверки короче его работой с определенной строкой ....

Однако - его работу. И это важно. И, возможно, кому-то это нужно.

ТНХ всем

редактировать и первый Improvment ....

команда Get-WinEvent -FilterHashtable @ {LogName = "$ Журнал"; ID = "$ EventID" ; время_запуск = "$ timetocheck"} | Where-Object {$ _ Сообщение -как "$ приложение".} занимает 0,7 секунды

команда Get-WinEvent $ журнал | Where-Object {($ .TimeCreated -ge $ timetocheck) -and ($ .id -eq $ eventid) -and ($ _.Сообщение -Кака «$ приложения»)} занимает 4,2 секунды

так я изменил его

0

Попробуйте с помощью следующего кода

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 
} 
+0

Unfortuna ДЕТАЛЬ это не работает должным образом i've заменить для тестирования 'перезапускать- с' обслуживания 'записи хоста«ошибка»' и сообщение каждый раз здесь - даже если время установлено на 0 –

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