간단한 설명
종료 오류를 생성하는 Throw 키워드에 대해 설명합니다.
긴 설명
Throw 키워드로 인해 종료 오류가 발생합니다. Throw 키워드를 사용하여 명령, 함수 또는 스크립트의 처리를 중지할 수 있습니다.
예를 들어, If 문의 스크립트 블록에서 Throw 키워드를 사용하여 조건에 응답하거나 Try-Catch-Finally 문의 Catch 블록에서 사용할 수 있습니다. 매개 변수 선언에 Throw 키워드를 사용하여 함수 매개 변수를 필수로 만들 수도 있습니다.
Throw 키워드는 사용자 메시지 문자열 또는 오류를 일으킨 개체와 같은 모든 개체를 throw할 수 있습니다.
문법
Throw 키워드의 구문은 다음과 같습니다.
throw [<expression>]
Throw 구문의 식은 선택 사항입니다. Throw 문이 Catch 블록에 나타나지 않고 식을 포함하지 않으면 ScriptHalted 오류가 발생합니다.
C:\PS> throw
Exception: ScriptHalted
Throw 키워드가 식 없이 Catch 블록에 사용되면 현재 RuntimeException이 다시 throw됩니다. 자세한 내용은 about_Try_Catch_Finally 참조하세요.
문자열을 던지기
Throw 문의 선택적 표현식은 다음 예제와 같이 문자열일 수 있습니다.
C:\PS> throw "This is an error."
Exception: This is an error.
다른 물체 던지기
식은 다음 예제와 같이 PowerShell 프로세스를 나타내는 개체를 던지는 개체일 수도 있습니다.
C:\PS> throw (get-process Pwsh)
Exception: System.Diagnostics.Process (pwsh) System.Diagnostics.Process (pwsh) System.Diagnostics.Process (pwsh)
$error automatic 변수에서 ErrorRecord 개체의 TargetObject 속성을 사용하여 오류를 검사할 수 있습니다.
C:\PS> $error[0].targetobject
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
125 174.44 229.57 23.61 1548 2 pwsh
63 44.07 81.95 1.75 1732 2 pwsh
63 43.32 77.65 1.48 9092 2 pwsh
ErrorRecord 개체 또는 .NET 예외를 throw할 수도 있습니다. 다음 예제에서는 Throw 키워드를 사용하여 System.FormatException 개체를 throw합니다.
C:\PS> $formatError = new-object system.formatexception
C:\PS> throw $formatError
OperationStopped: One of the identified items was in an invalid format.
결과로 발생한 오류
Throw 키워드는 ErrorRecord 개체를 생성할 수 있습니다. ErrorRecord 개체의 Exception 속성에는 RuntimeException 개체가 포함되어 있습니다. ErrorRecord 개체 및 RuntimeException 개체의 나머지 부분은 Throw 키워드가 throw하는 개체에 따라 다릅니다.
RunTimeException 객체는 ErrorRecord 객체로 래핑되고 ErrorRecord 객체는 $Error automatic 변수에 자동으로 저장됩니다.
Throw를 사용하여 필수 매개 변수 만들기
이전 버전의 PowerShell과 달리 매개 변수 유효성 검사에 Throw 키워드를 사용하지 마세요. 올바른 방법은 about_Functions_Advanced_Parameters 참조하세요.