Powershell 에서 Try/Catch/Finally block 설명

PowerShell 에서 Try/Catch block 은 스크립트에서 생성 된 오류를 처리하는 것입니다. 구체적으로 말하자면,오류는 오류를 종료해야합니다. PowerShell 의 마지막 블록은 Try/Catch 와 함께 매번 작성하는 것이 필수는 아니지만 오류가 발생했는지 여부에 관계없이 실행됩니다.

따라서 Try 블록을 사용할 때 Catch 블록은 필수이지만 최종 블록은 아닙니다.

  • 종료 오류가있는 try/Catch block-다음은 최종 블록이없는 종료 오류의 예입니다.,

try{ This is not allowed "This is Allowed"}catch{ Write-Host "Error occured" -BackgroundColor DarkRed}

출력

위의 예에서,우리가 뭔가를 반환되는 것은 허용되지 않지만 다음 줄었 진짜 있지만 그것을 실행할 수 없습니다 때문에 종료하는 오류가 있습니다.

우리의 목표는 Try 블록에서 생성 된 예외 및 오류 메시지를 잡는 것입니다. 우리가 알다시피 오류는$오류 변수에 저장됩니다. 는 경우에 당신은 출력을 확인하십시오$변수는 오류가 당신을 얻을 수 있다면 전체 보기만을 실행할 때마다 어떤 스크립트와 당신은 당신을 처리하는 오류게 된를 사용하여 오류$오류가 있습니다.,clear()명령 또는 새 PowerShell 콘솔을 사용하십시오. 배열의 특정 오류 변수 위치를 알고있는 경우 직접 사용할 수 있습니다. 예를 들어,$error

우리는$Error 변수의 모든 속성이 무엇인지 볼 수 있습니다.

PS C:\WINDOWS\system32> $Error | Get-Member | Select Name, MemberTypeName MemberType---- ----------Equals MethodGetHashCode MethodGetObjectData MethodGetType MethodToString MethodCategoryInfo PropertyErrorDetails PropertyException PropertyFullyQualifiedErrorId PropertyInvocationInfo PropertyPipelineIterationInfo PropertyScriptStackTrace PropertyTargetObject PropertyPSMessageDetails ScriptProperty

위의 몇 가지 속성이 예외 및 오류 세부 정보를 찾는 데 도움이됩니다. 그들을 보자 우리는뿐만 아니라 캐치 블록에 활용할 수 있습니다.첫 번째 InvocationInfo 속성입니다., 를 사용할 수도 있습$오류만이 유일한 오류도 다 그래서 우리가 사용하는 직접$오류가 있지만 당신을 얻을 수없는 자기 암시와 팝업$변수는 오류가 직접.

PS C:\WINDOWS\system32> $Error.InvocationInfoMyCommand :BoundParameters : {}UnboundArguments : {}ScriptLineNumber : 3OffsetInLine : 5HistoryId : 50ScriptName :Line : This is not allowedPositionMessage : At line:3 char:5 + This is not allowed + ~~~~PSScriptRoot :PSCommandPath :InvocationName : ThisPipelineLength : 0PipelinePosition : 0ExpectingInput : FalseCommandOrigin : InternalDisplayScriptPosition :

아래 그림과 같이 Line 및 PositionMessage 에서 특정 정보를 얻을 수 있습니다.

지금 예외 속성을 확인하십시오.

PS C:\WINDOWS\system32> $Error.ExceptionThe term 'This' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

예외 메시지가

PS C:\WINDOWS\system32>$error.Exception.MessageThe term 'This' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

사용할 수 있습니다 다른 속성을 생각하는 것이 도움이 될을 표시하는 오류 메시지가 표시됩니다. 우리는 오류를 잡기 위해 캐치 블록에서 이들 중 몇 가지를 사용할 것입니다., 현재 오류로 작업하고 있으므로$_를 사용할 것입니다. 현재 오류/예외를 처리합니다.

출력

Error Message: The term 'This' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.Error in Line: This is not allowedError in Line Number: 3Error Item Name:

위에서 보았 듯이 마침내 블록이 없었지만 Try/Catch 는 계속 작동했습니다. 마지막으로 블록을 추가하여 변수와 오류를 지우고 모든 메시지를 표시 할 수 있습니다.

  • 비 종료 오류가있는 try/Catch 블록.,

우리가 본 바와 같이 위의 예제에서는 종료하는 오류될 수 있으로 제어하려고/을 잡을 차단하지만 종료되지 않는 오류할 수 없기 때문에 그들은 내장 cmdlet 및 기능 오류가 발생하고 기본 설정 오류에 대한 작업이 계속 따라서 다음 명령을 계속 실행하는 경우에도 오류가 처리되지 않습니다.

PS C:\WINDOWS\system32> $ErrorActionPreferenceContinue

을 강제 종료되지 않는 오류를 종료하는 오류를 변경해야 하나$ErrorActionPreference 변수를 중지하거나를 사용할 필요가 ErrorAction 매개 변수를 중지 값입니다., 여기서 ErrorAction 매개 변수는 전체 스크립트가 아닌 특정 명령에 필요할 때 사용합니다.

출력

Error Message: Cannot find any service with service name 'WhichService'.Error in Line: Get-Service WhichService -ErrorAction StopError in Line Number: 4Error Item Name:This is going to run anyway

당신이 볼 수 있는 위의 예에서 얻을-서비스는 생산 비 종료하는 오류하고 우리는 할 수 있으로 변환하여 종료하는 오류로 ErrorAction 멈출수와 같은 예외를 정하는 체약국은,예외가 잡힌 적이 있습니다.

  • 수동으로 처리에 특정 예외

처리하는 경우 특정 형식의 예외는 다음을 제공할 수 있습니다 예외에서 이름이 있습니다., 예외의 이름을 알기 위해서는$Error 변수의 속성을 가져와야하며 GetType()입니다. 아래 예제에서는 아래의 오류 출력에서 예외 이름을 찾아야합니다.

가정의 오류에 저장되$오류가 변수를 실행해야 합 아래의 명령을 다음과 같은 예외를 받은 이름을 사용하고 있습니다.

$Error.Exception.GetType().FullName
PS C:\WINDOWS\system32> $Error.Exception.GetType().FullNameSystem.Management.Automation.MethodInvocationException

을 가지고 예외 형식 이름으로 위의 명령에 사용할 수 있습에서도 catch 블록을 잡을 것만 특정한 예외는 아니다.,나는 이것이 내가하는 일이지만,내가하는 일은 내가하는 일이지만,내가하는 일은 내가하는 일이다.

PowerShell 에서 여러 예외를 잡을 수도 있습니다. 이를 위해 단일 시도 블록과 여러 개의 캐치 블록을 사용할 수 있습니다.

출력

Cannot find path 'C:\temp\cominfo1.html' because it does not exist.Setting up ErrorActionPreference to the Default value

여기에 첫 번째 명령을 자체는 오류를 생성된 그래서 다음 명령을 실행되지 않습니다. 는 경우 먼저 명령어를 생성하지 않는 어떤 오류가 다음 명령을 확인하고하는 경우 예외가 발생합니다 다음으로는 특정 예외 블록 실행됩니다.,

원하지 않는 경우에 처리하는 여러한 예외하고는 여전히 당신이 필요한 명령을 오류를 무시할 수 있다 그러나지 않아야 통과 catch 블록을 그래서 다음 명령을 실행할 수 있습니다 그럼 당신이 사용할 수 있습 무시하거나 SilentlyIgnore 에 ErrorAction 매개 변수입니다.

2020 년 6 월 6 일 16:36:12 에 게시 됨

광고

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다

도구 모음으로 건너뛰기