exception 예제 입력 된 예외를 포착하는 PowerShell



부적절한 예외처리 (1)

예외가 catch 명령에서 명시 적으로 언급 된 경우에도 예외를 catch하지 않는 PowerShell에 문제가 있습니다.

이 경우 ProcessID가 아직 실행 중인지 확인하려고 시도하고 있지 않은 경우 몇 가지 조치가 취해집니다.

내가 고민하는 샘플 코드 블록은 다음과 같습니다.

    try {
      Get-Process -Id 123123 -ErrorAction 'Stop'
    } 
    catch [Microsoft.PowerShell.Commands.ProcessCommandException] {
      "Caught by Exception Type: Process is missing"
    }
    catch {
    if ($_.Exception.getType().FullName -eq "Microsoft.PowerShell.Commands.ProcessCommandException") {
      "Caught by Catch All: Process is missing"
      }
    }

이 코드 블록이 실행되면 출력은 다음과 같습니다.

Caught by Catch All: Process is missing

첫 번째 catch 조건은 올바르게 throw 된 예외의 이름을 지정하지만 트리거하지는 않습니다.

상황을 악화시키기 위해 두 번째 catch 명령이 실행될 때 (어떤 것도 포착) 예외 유형의 이름을 쿼리하고 "Microsoft.PowerShell.Commands.ProcessCommandException"인지 확인한 다음 적절한 단계를 수행합니다.

이 문제를 해결할 수는 있지만 PowerShell이 ​​Exceptions를 처리하는 방법에 대한 근본적인 방법을 놓치고 있다고 생각합니다.

누구든지 이걸 내게 비춰 줄 수 있니?


ErrorAction을 Stop으로 설정하면 종결되지 않는 오류가 랩되고 System.Management.Automation.ActionPreferenceStopException 유형으로 throw됩니다.이 유형이 catch하려는 유형입니다.

try 
{
    Get-Process -Id 123123 -ErrorAction Stop
} 
catch [System.Management.Automation.ActionPreferenceStopException]
{
    ... do something ...
}




powershell