PowerShell 오류 억제하는 방법
- PowerShell의 오류 동작 소개
-
PowerShell에서
-ErrorAction
매개변수 사용 - PowerShell에서 오류 동작 기본 설정 설정
-
PowerShell에서
Try-Catch
문 매개변수 사용 - 결론

이 기사에서는 PowerShell 오류 처리의 복잡한 세계를 파고들며 -ErrorAction
매개변수, 오류 동작 기본 설정 설정, Try-Catch
문 사용과 같은 다양한 방법을 탐구합니다. 이러한 각 방법은 오류에도 불구하고 스크립트 실행을 조용히 계속하는 것에서부터 정교한 오류 처리 메커니즘을 구현하는 데까지 각기 고유한 목적을 가지고 있습니다.
이 상세한 탐구는 초보 및 숙련된 스크립터 모두에게 PowerShell 스크립트의 오류 처리에 대해 정보에 입각한 결정을 내릴 수 있는 지식을 제공하기 위해 고안되었으며, 예상치 못한 상황을 효과적으로 관리하고 스크립트의 무결성을 유지할 수 있도록 합니다.
PowerShell의 오류 동작 소개
Windows PowerShell 오류를 억제하는 것은 쉽지만, 그렇게 하는 것이 항상 최선의 선택은 아닙니다(물론 그럴 수는 있지만). 우리가 무심코 PowerShell에 오류를 숨기라고 지시하면, 스크립트가 예측할 수 없는 방식으로 작동할 수 있습니다.
오류 메시지를 억제하는 것은 문제 해결과 정보 수집을 훨씬 더 복잡하게 만듭니다. 그러므로 이 기사에서 볼 다음 스니펫을 사용하는 데 주의하십시오.
PowerShell에서 -ErrorAction
매개변수 사용
PowerShell의 -ErrorAction
매개변수는 cmdlet이 실행 시간 오류에 어떻게 응답하는지를 결정합니다. 기본적으로 PowerShell은 오류를 콘솔에 표시하고 실행을 계속합니다.
그러나 특정 상황에서는 이 동작을 변경하고 싶을 수 있습니다. 예를 들어, 오류 메시지를 억제하거나 오류가 발생했을 때 실행을 중지하려고 할 수 있습니다. 이때 -ErrorAction
이 중요합니다.
명령:
Get-Service 'svc_not_existing' -ErrorAction SilentlyContinue
Write-Host "This line will execute regardless of the above command's result."
우리의 스크립트에서는 존재하지 않을 것으로 추정되는 'svc_not_existing'
이라는 서비스에 대한 정보를 검색하려고 시도합니다. -ErrorAction SilentlyContinue
를 적용함으로써 PowerShell에 중단 없이 계속 진행하도록 지시하여 서비스가 발견되지 않을 경우 오류 메시지를 표시하지 않게 합니다.
이후 우리의 스크립트는 Write-Host
명령으로 자연스럽게 전환됩니다. 이 명령은 콘솔에 특정 메시지를 출력합니다.
출력:
PowerShell에서 오류 동작 기본 설정 설정
스크립트가 특정 방식으로 동작해야 하는 경우(예: 오류 억제) 기본 설정 변수를 설정하는 것을 고려할 수 있습니다. 기본 설정 변수는 PowerShell의 구성 설정으로 작용합니다.
우리는 기본 설정 변수를 사용하여 PowerShell이 유지하는 기록 항목의 수를 제어하거나 특정 작업을 수행하기 전에 PowerShell이 사용자에게 요청하도록 강제할 수 있습니다.
예를 들어, 전체 세션에 대해 -ErrorAction
매개변수를 SilentlyContinue
로 설정하는 방법은 다음과 같습니다.
명령:
$ErrorActionPreference = 'SilentlyContinue'
Get-Service 'nonexistent_service'
Write-Host "This message is displayed even if the previous command fails."
우리의 스크립트에서는 $ErrorActionPreference
를 'SilentlyContinue'
로 설정하는 것으로 시작합니다. 이 작업은 설정이 스크립트의 모든 후속 명령에 적용되도록 보장합니다.
결과적으로, 일반적으로 나타날 오류는 모두 효과적으로 억제됩니다.
다음으로, 우리는 Get-Service
cmdlet을 사용하여 존재하지 않는 서비스를 검색하려고 시도합니다. 정상적인 상황에서는 오류가 발생할 것입니다. 하지만, 이전에 설정한 $ErrorActionPreference
덕분에 생성될 오류는 보이지 않고 방해가 되지 않습니다.
그 후 우리의 스크립트는 부드럽게 Write-Host
명령으로 넘어갑니다. 이 명령은 콘솔에 메시지를 표시하는 역할을 합니다.
출력:
ErrorAction
스위치 매개변수에 지정할 수 있는 많은 다른 오류 동작이 있습니다.
Continue
: PowerShell은 오류 메시지를 표시하지만 스크립트는 계속 실행됩니다.Ignore
: PowerShell은 오류 메시지를 생성하지 않고, 호스트에 오류 출력을 기록하며, 실행을 계속합니다.Stop
: PowerShell은 오류 메시지를 표시하고 스크립트 실행을 중지합니다.Inquire
: PowerShell은 오류 메시지를 표시하지만 사용자가 계속할지 확인을 요청합니다.SilentlyContinue
: PowerShell은 코드가 작동하지 않거나 종료되지 않는 오류가 있는 경우 조용히 코드 실행을 계속합니다.Suspend
: PowerShell은 스크립트의 작업 흐름을 중단합니다.
PowerShell에서 Try-Catch
문 매개변수 사용
Try-Catch
문은 PowerShell에서 오류를 관리하고 응답하는 강력한 도구입니다. 그것은 스크립터가 코드를 try
블록으로 감싸고 실행 중에 발생하는 예외(오류)를 catch
할 수 있게 해줍니다.
이 접근법은 오류를 우아하게 처리하고, 오류가 발생할 때 특정 작업을 수행하거나 오류로 인해 스크립트가 갑자기 종료되는 것을 방지하고 싶을 때 유용합니다.
명령:
try {
Get-Service 'nonexistent_service'
}
catch {
Write-Host "An error occurred: $_"
}
이 스크립트에서는 먼저 잠재적으로 오류가 발생할 수 있는 명령인 Get-Service 'nonexistent_service'
를 try
블록 안에 캡슐화합니다. 존재하지 않을 가능성이 높은 서비스를 검색하려고 시도하며, 이는 일반적으로 오류를 초래할 것입니다.
그러나 이 오류가 스크립트를 종료하거나 처리되지 않은 예외를 표시하도록 허용하는 대신, 우리는 이를 포착합니다. catch
블록에서는 사용자 정의 오류 메시지를 표시하기 위해 Write-Host
명령을 실행하며, 오류 세부정보를 포함합니다($_
는 현재 오류 객체를 나타냅니다).
출력:
결론
PowerShell의 오류 처리의 다양한 측면을 통해 우리의 여정을 마치면서, 이 스크립팅 언어의 힘은 그 유연성과 깊이에 있다는 것이 분명합니다. -ErrorAction
매개변수의 단순함에서부터 Try-Catch
문이 제공하는 미세한 제어에 이르기까지, PowerShell은 다양한 시나리오에서 오류를 관리하기 위한 풍부한 도구 세트를 제공합니다.
이러한 도구를 이해하고 적용 시점을 아는 것은 강력하고 탄력적인 스크립트를 작성하는 데 필수적입니다. 우리는 오류를 억제하는 것이 상황에 따라 유용하기도 하고 위험하기도 하다는 것을 살펴보았으며, 나중에 분석을 위해 오류를 캡처하는 방법에 대해 알아보았습니다.
이제 여러분은 이러한 방법에 대해 포괄적으로 이해하고 있으며, 여러분의 스크립팅 작업에 이를 적용할 준비가 되어 있어야 합니다.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn