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
문에는 Try
와 Catch
라는 두 개의 블록이 있습니다. 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn