PowerShell에서 Try-Catch 블록을 사용하여 오류 처리

Marion Paul Kenneth Mendoza 2023년6월20일
  1. PowerShell의 $ErrorActionPreference 변수
  2. PowerShell의 ErrorAction 일반 매개변수
  3. PowerShell try-catch 블록 사용
PowerShell에서 Try-Catch 블록을 사용하여 오류 처리

코드 오류는 읽기 어려운 경우가 많기 때문에 스크립트의 내용과 위치를 파악하는 것이 거의 불가능합니다. PowerShell에는 오류 처리를 개선하기 위한 몇 가지 옵션이 있습니다.

이 문서에서는 PowerShell의 오류 작업 기본 설정과 PowerShell Try-Catch 블록(및 Finally 블록)을 사용하여 오류 처리를 수행하기 위해 가로채는 방법에 대해 설명합니다.

PowerShell의 $ErrorActionPreference 변수

기본 설정 변수는 PowerShell의 개념이며 이러한 변수는 PowerShell의 동작을 다양한 방식으로 변경하는 데 사용됩니다. $ErrorActionPreference 변수는 이러한 변수 중 하나입니다.

$ErrorActionPreference 변수는 PowerShell이 종료되지 않는 오류를 처리하는 방법을 제어합니다. $ErrorActionPreference 값은 기본적으로 "계속"으로 설정됩니다.

$ErrorActionPreference 변수가 "Stop"으로 설정되면 PowerShell은 모든 오류를 종료 오류로 처리합니다. 아래 스니펫을 사용하여 $ErrorActionPreference 값을 변경합니다.

$ErrorActionPreference = "Stop"

PowerShell의 ErrorAction 일반 매개변수

ErrorAction 매개변수는 $ErrorActionPreference 값이 PowerShell 세션에 적용된 경우 일반 매개변수를 지원하는 모든 명령에 적용됩니다. ErrorAction 인수의 값은 $ErrorActionPreference 변수와 동일합니다.

ErrorAction 매개변수 값은 $ErrorActionPreference 매개변수 값보다 우선합니다.

예제 코드:

$ErrorActionPreference = "Continue"
$files = Get-Content .\files.txt
foreach ($file in $files) {
    Write-Output "Reading file $file"
    # Use the -ErrorAction common parameter
    Get-Content $file -ErrorAction STOP
}

수정된 코드를 실행한 후 $ErrorActionPreference"계속"으로 설정되어 있어도 오류가 발생하면 스크립트가 계속 종료되는 것을 볼 수 있습니다. Get-Content의 PowerShell ErrorAction 매개변수 값이 "Stop"으로 설정되었기 때문에 스크립트가 종료되었습니다.

PowerShell try-catch 블록 사용

이제 PowerShell Try-Catch-Finally 블록에 대해 알아볼 차례입니다. PowerShell의 'Try-Capture'(및 선택적 'Finally') 블록을 사용하면 코드 조각 주위에 블록을 둘러싸 모든 문제를 포착할 수 있습니다.

예제 코드:

try {
    <statement list>
}
catch [[<error type>][',' <error type>]*]{
    <statement list>
}
finally {
    <statement list>
}

PowerShell에서 Try하고 결함을 모니터링하려는 코드는 Try 블록에 있습니다. Try 블록에서 코드 실행 중 오류가 발생하면 $Error 변수에 오류가 저장되고 Catch 블록으로 전달됩니다.

Try 블록이 오류를 반환하면 Catch 블록이 수행할 단계를 제공합니다. Try 문은 여러 Catch 블록을 포함할 수 있습니다.

해당 코드는 Finally 블록의 Try 문 끝에 있습니다. 스크립트가 오류를 계산했는지 여부에 관계없이 이 블록이 실행됩니다.

간단한 Try 문에는 TryCatch라는 두 개의 블록이 있습니다. Finally는 선택적 블록입니다.

특정하지 않은 예외를 포착하려면 Capture 옵션이 비어 있어야 합니다. 아래 예제 코드의 $ErrorActionPreference 변수 부분에 있는 스크립트는 Try Catch 블록을 사용하도록 조정됩니다.

이제 foreach 문이 아래 Try 블록에 포함됩니다. 'Catch' 블록에는 오류가 발생할 경우 "An Error Occurred" 문자열을 표시하는 코드가 포함되어 있습니다.

마지막으로 Finally 블록 코드는 $Error 변수를 지웁니다.

예제 코드:

$files = Get-Content .\files.txt
try {
    foreach ($file in $files) {
        Write-Output "Reading file $file"
        Get-Content $file -ErrorAction STOP
    }
}
catch {
    Write-Host "An Error Occured" -ForegroundColor RED
}
finally {
    $Error.Clear()
}

출력:

An Error Occured
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn