2014-06-09 2 views
0

Powershell에서 100 % 새로운 것으로 보였습니다.이 주제에 대해 많이 살펴 보았지만 실제로 많이 찾지는 못했습니다. 그러나이 문제가 다른 곳에서 응답 되었다면 사과드립니다.get-eventlog의 조건부 사용

서비스가 중단 될 때마다, 일반적으로 매일 오전 7 시부 터 오전 8 시까 지 작동을 멈추고 기능을 복원 할 수있는 유일한 방법은 서비스를 다시 시작하는 것입니다. 소프트웨어 관련.

이벤트 로그를 분석하여 15 분마다 특정 오류를 찾습니다.

$lookForError = get-eventlog -before $currentDate -after $pastDate -logname application -source "Windows Backup" 


$itCrashed = $FALSE 

$lookForError 
<# 
while($itCrashed = false) 
{ 
    if ($lookForError -eq) 

}#> 

여기에 일반적인 생각은 이벤트가 발생한 경우,이 경우 true로 itCrashed 변경, 확인 루프를 종료하고 서비스를 다시 시작 명령을 시작하는 것입니다.

필자는 powershell을 사용하여 오류의 존재를 감지하는 방법에 대해 너무 확신하지 못합니다. 이 같은

+1

이 경우 서비스 자체가 중단 되나요? – alroc

+0

서비스가 불행히도 멈추지 않지만 로그에 오류가 발생하면 액세스 위반 오류가있는 "오류가있는 응용 프로그램"오류가 발생합니다. – Blargenspiel

+0

이벤트 로그에 나타나는 오류는 무엇입니까? 텍스트를 검색해야합니까, 아니면 특정 오류가 발생합니까 #? – TheMadTechnician

답변

0

뭔가 ... 바른 길에 이벤트 ID로 결과를 제한합니다

$lookForError = get-eventlog -before $currentDate -after $pastDate -logname application -source "Windows Backup" | Where-Object {$_.EventID -eq 1000} 

당신을 얻어야한다. 거기에서 큰 이벤트 로그와 성능 향상을 위해 ...

if($lookForError.Length -gt 0) { 
    # Restart service 
    } 

0보다 큰 길이는이 서비스를 다시 시작해야합니다 의미한다고 가정 할 수 있어야한다, 이것을 사용합니다. 감사합니다 @ mjolinor! 에 따르면

# First we configure a file to store the last recorded index 
$IndexFile = "C:\Users\Public\serviceindex.txt" 
if (Test-Path $IndexFile) { 
    [Int32]$lastIndex = Get-Content $IndexFile 
    } else { 
    $lastIndex =0 
    } 
$eventPadding = 100 

# Next we get the newest index and calculate the difference, using this to limit the results 
$newest = Get-EventLog -LogName Application -Newest 1 
$records = $newest.Index-$lastIndex+$eventPadding 
$lookForError = Get-EventLog -LogName Application -source "Windows Backup" -Newest $records | Where-Object {$_.EventID -eq 1000} 

# Finally we restart the service if there was an error and update the index file 
if($lookForError.Length -gt 0) { 
    # Restart service 
    $lookForError.Index | Out-File $IndexFile 
    } 
+1

필자가 작성한 것과 매우 유사하지만'-after (get-date) .addminutes (-15)'를 수행하고 -before를 건너 뛰고 난 다음에 태스크 스케줄러에서 매 15 분마다 스크립트를 호출한다. . 당신이 할 수있는 일은 (** pseudocode **)'if (get-eventlog -source app -after (get-date) -15 -source "winbackup"| {$ _. eventid -eq 1000}) {Restart -Service "WinBackup"}'을 실행하고 원하는 경우 한 줄로 만들고 작업 스케줄러 (_powershell -noprofile & {code goes here} _)에서 해당 줄을 직접 호출하고 스크립트로 저장하지 않습니다. – TheMadTechnician

+0

Get-EventLog - 큰 이벤트 로그에서 끔찍하게 느린 후 (로그 시작 부분부터 읽기 시작) 최신 이벤트에서 색인 번호를 가져 와서 저장하면 속도를 높일 수 있으며이를 다음 검색의 시작점으로 사용할 수 있습니다. – mjolinor

+0

@mjolinor -Index는 Int32를 사용합니다. 전체 결과 집합을 파이프 할 필요없이이를 어떻게 시작점으로 사용 하시겠습니까? –

0
while (((Get-Date).Hour -gt 6) -and ((Get-Date).hour -lt 9)) { 

     $lastTested = (get-date).AddMinutes(-15) 

     $potentialLogs = Get-EventLog -LogName Application -After $lastTested | where { ($_.instanceid -eq 1000) -and ($_.source -eq "Application Error") } 

     $potentialLogs | foreach { 

      if(($_.ReplacementStrings -split '\n') -match 'w3wp.exe') { 

       restart-service -name ## [insertServiceNameHere] 

      } 
     } 
     Start-Sleep -Seconds 900 ## 15mins 
} 

answer

인터넷 정보 서비스 (IIS) 작업자 프로세스는 웹 응용 프로그램을 실행하는 Windows 프로세스 (W3wp.exe를)이며, 전송 요청을 처리 할 책임이 특정 응용 프로그램 풀에 대한 웹 서버에 연결합니다. 요청이 때

또한

그들은 단지 스핀 업. 오랜 시간 동안 요청이 없으면 시스템이 종료됩니다.

저는 웹 앱이 밤새 요청을받지 못하고 작업자 프로세스를 종료하고 직원이 아침에 업무에 도착하면 그 사람의 첫 번째 사람이 출근 할 것이라고 추측합니다. 이벤트 로그에 표시되는 오류?

아마도 특정 앱의 구성을 살펴 보거나 매일 오전 5시에 예약 된 작업을 실행하여 서비스를 다시 시작해야 할 가치가 있습니까?

+0

이것은 흥미 롭다, 나는 이것을 확실히 시험 할 것이다! – Blargenspiel