2013-02-11 5 views
2

while($true) 루프 끝에 start-sleep -s 60이 있습니다. 목적은 외부 사용자 PowerShell 을 다른 사용자으로 시작하여 서버 목록을 실행하고 이벤트 로그에서 마지막 순간의 변경 사항을 확인한 다음 그에 따라 대응합니다.PowerShell : while true 루프에서 오류를 확인 하시겠습니까?

내 while 루프 (아래)가 -credential 플래그를 사용하여 다른 사람으로 스크립트를 실행했기 때문에 계정 잠김, 암호 만료, 파일 누락 등의 오류가 우려됩니다.

if ($error) 문을 시도하고 외부 스크립트의 파일 이름을 변경했지만 알림을받지 못했습니다. 나는 스스로를 다시 확인하는 것이 결코 멈추지 않기 때문에 그것이라고 생각하고 있나?

while($true) { 

    # Start the scan 
    Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command & c:\batch\02-Scan.ps1' 

    # Sleep 60 seconds 
    start-sleep -s 60 

} 

매분 예약 된 작업을 변경할 수 있다고 가정하지만 지금까지이 루프는 훌륭하게 작동하는 것으로 보입니다. 루프가 활성화되어있는 동안 오류 검사를 시작하기 만하면됩니다.

+0

: 누락 된 파일 오류 및 (자격 증명과 같은) 다른 모든 오류를 잡기 위해, 다음과 같은 내용을 사용한다 (!? $)의 경우 – EBGreen

답변

3

try/catch 블록을 사용해 보셨습니까? 잘못된 자격 증명은 종료 오류이므로 자격 증명 오류 후 try 블록의 나머지 코드는 실행되지 않습니다. 당신이 그것을 붙잡을 때, 당신은 당신이 원하는 무엇이든 할 수 있습니다.

try { 
    Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command & c:\batch\02-Scan.ps1' 
} catch { 
    #Catches terminating exceptions and display it's message 
    Write-Error $_.message 
} 

당신이 모든 오류를 잡을 Start-Process 라인에 -ErrorAction Stop을 추가합니다. 말했듯이, 자격 증명을 만들 착신 오류를해야 불필요한

편집가 왜 처음에 스크립트를 실행 Start-Process을 사용 erroraction 매개 변수? powershell 스크립트를 원격으로 실행하는 Invoke-Command으로 바꿨습니다. 스크립트 파일이 누락되면 NON 종료 오류가 발생합니다. 종료되지 않는 오류이므로 -ErrorAction Stop 매개 변수를 사용해야합니다. PS의 영석의 나의 마음에 드는 비트 시도

try { Invoke-Command -ScriptBlock { & c:\batch\02-Scan.ps1 } -ErrorAction Stop 
} catch { 
    if ($_.Exception.GetType().Name -eq "CommandNotFoundException") { 
     Write-Error "File is missing" 
    } else { 
     Write-Error "Something went wrong. Errormessage: $_" 
     #or throw it directly: 
     #throw $_ 
    } 
} 
+0

누락 된 파일이나 기타 일반적인 오류를 어떻게 잡을 수 있습니까? 누락 된 파일도 종료 오류라고 가정하므로'-ErrorAction'없이 잡힐 것입니다. try/catch 블록을 스크립트에 추가하고 파일 이름을 변경했습니다. 그런 다음 알림을 이메일로 보내도록 설정했습니다. 그것은 결코 보내지 않았다. 'Write-Error $ _. message '를 추가했는데 화면에 아무 것도 나타나지 않았습니다. 이것이 작동하는 경우 디버깅을하려고합니다. – Pat

+0

업데이트 : 계정 비밀번호가 유효하지 않은 경우 작동합니다. 누락 된 파일을 어떻게 캐치 할 수 있습니까? 문제없이 '시작 프로세스 powershell'수있을 때 오류를 인식하지 않습니다. 보조 Powershell 창에서 오류가 발생합니다. – Pat

+0

업데이트 된 답변보기 –

0

어쩌면?

while($true) { 

# Start the scan 
try{ 
Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command & c:\batch\02-Scan.ps1' -ErrorAction Stop 
} 
    catch { 
      send-alert 
      break 
      } 

# Sleep 60 seconds 
start-sleep -s 60 
} 
+0

이 잘못된 자격 증명을 잡기 위해 좋은 작품 . 다음 질문 : 누락 된 파일 이름을 잡는 것도 가능합니까? 문제없이 '시작 프로세스 powershell'수있을 때 오류를 인식하지 않습니다. – Pat

+0

명령이 아닌 -file 매개 변수를 사용하면 더 잘 작동합니까? – mjolinor

관련 문제