PowerShell:
에러 처리하기

방법:

# 예외 처리를 위한 기본 Try-Catch
try {
    # 오류를 발생시킬 수 있는 코드
    $result = 1 / 0
} catch {
    # 오류가 발생했을 때 수행할 작업
    Write-Host "이런, 오류가 발생했습니다: $_"
}

# 사용자 정의 오류 메시지 출력
try {
    Get-Item "nonexistentfile.txt" -ErrorAction Stop
} catch {
    Write-Host "파일을 찾을 수 없습니다."
}

# 최근 오류를 검사하기 위한 $Error 변수 사용

심화 탐구

PowerShell은 Monad로 처음 시작한 이후로 많은 발전을 거듭했습니다. 오류 처리 기능은 시간이 지나며 더욱 견고해졌으며, C#과 같은 다른 프로그래밍 언어들로부터 많은 기능을 가져왔습니다. try-catch-finally 문법은 그러한 한 예입니다. 이전에는 스크립터들이 조건을 체크하고 $Error 자동 변수를 사용하는 데 주로 의존했습니다.

PowerShell에는 종료 오류와 비종료 오류라는 두 가지 주요 오류 유형이 있습니다. 종료 오류는 try-catch 블록에서 캐치하지 않는 이상 스크립트가 중단될 것이며, 비종료 오류는 -ErrorAction Stop을 지정하지 않는 한 중단되지 않습니다. 이 구분은 오류 처리에 대해 세밀한 제어를 할 수 있도록 해, 오류가 정말 전체 스크립트를 멈추는 것이 타당한지, 간단히 기록하고 무시할 수 있는지를 결정할 수 있게 합니다.

PowerShell의 오류 처리에서는 무조건 실행되는 finally 블록도 사용할 수 있습니다. 오류가 발생한 경우든 아니든 상관없이 실행됩니다. 정리 작업에 아주 적합합니다.

스크립트 작업을 깊이 수행할 때는 특정 예외 유형을 처리하여 더 세밀한 제어를 할 수도 있습니다.

대안으로, 예외를 발생시키지 않고 오류를 캡처하는 구식인 -ErrorVariable 매개변수와 마지막 작업이 성공적이었는지 알려주는 $? 변수가 있습니다. 훌륭한 도구들이지만, 견고한 try-catch만큼은 아닐 수 있습니다.

참고 자료