아담 자동화

당신은 이제까지 스크립트를 실행 또는 PowerShell microsoft azure 얻을 직면 소리를 지르는 벽의 텍스트에 붉은 아래와 같은?

의 예에 오류가 PowerShell

오류가 될 수 있는 압도적인 탐색 할 수 있습니다. 그리고 무엇보다도 오류는 종종 읽기 어렵 기 때문에 스크립트가 무엇이며 어디에서 잘못되었는지 결정하는 것은 불가능합니다.,

다행히도 오류 처리를 통해이를 더 잘 수행 할 수있는 PowerShell 에 몇 가지 옵션이 있습니다. 오류 처리를 사용하면 오류를 필터링하고 이해하기가 더 쉬운 방식으로 표시 할 수 있습니다. 그리고 오류를 이해하면 오류 처리에 더 많은 논리를 쉽게 추가 할 수 있습니다.

이 문서에서,당신은 당신에 대해 배울 것입니다에서 오류를 PowerShell 및할 수 있는 방법을 가로챌 수행하는 오류 처리 PowerShellTry Catch블록(그리고finally블록).,

테이블의 내용.

는 방법을 이해 오류를 작업에 PowerShell

전에 다이빙으로 오류 처리하자,처음 몇 가지 개념을 주변에 오류가 있습니다. 오류를 이해하면 더 나은 오류 처리 전략으로 이어질 수 있습니다.

는$오류 자동 변수

PowerShell,많은 자동 변수,그리고 그 중 하나는$Error자동 변수가 있습니다. PowerShell 은$Error변수를 사용하여 세션에서 발생하는 모든 오류를 저장합니다., $Error변수는 가장 최근에 정렬 된 오류 배열입니다.

PowerShell 세션을 처음 열면$Error변수가 비어 있습니다. $Error변수를 호출하여 확인할 수 있습니다.

는$변수는 오류가 빈

당신이 볼 수 있듯이,$Errorvariable 시작은 비어 있습니다., 그러나 오류가 생성되면 오류가 추가되어$Error변수에 저장됩니다.아래 예에서 오류는 존재하지 않는 서비스 이름을 의도적으로 가져 와서 생성됩니다.

PS> Get-Service xyzPS> $ErrorPS> $Error.Count
오류가 추가되$변수는 오류가

에서 볼 수 있듯이 위의 출력 생성되는 오류가 추가되었$Errorvariable.,

$Error 변수에는 PowerShell 세션에서 생성된 오류 모음이 포함되어 있습니다. 각 오류는 배열 위치를 호출하여 액세스 할 수 있습니다. 최신 오류는 항상 인덱스 0 에있을 것입니다.

예를 들어$Error를 사용하여 최신 오류를 검색 할 수 있습니다.

는$오류가 객체 속성

기 때문에 모든 것을 PowerShell 은 개체는$Errorvariable 은 객체이며,개체의 속성입니다., 파이프$Error변수를Get-Membercmdlet,당신의 목록을 참조하십시오 속성을 사용할 수 있다.

$Error | Get-Member
는$오류가 객체 속성

을 결정에 오류 이유 당신이 볼 수 있는 콘텐츠의InvocationInfo속성을 사용하여 아래의 명령.,

$Error.InvocationInfo
이 InvocationInfo 속성

이제 당신이 할 수 있과 같은 다른 속성을 발견하고 다른 어떤 정보를 찾을 수 있습니다!

종료 오류

종료 오류는 PowerShell 대 종료되지 않은 오류가 발생하면 실행 흐름을 중지합니다. 종료 오류가 발생할 수있는 몇 가지 방법이 있습니다. 한 가지 예는 존재하지 않는 매개 변수로 cmdlet 을 호출하는 경우입니다.,

으로 당신은에서 아래 스크린샷,는 경우는 명령Get-Process notepad실행하는 명령이 유효한 정보의 메모 프로세스가 표시됩니다.

메모장 프로세스 세부사항

지만,경우에는 매개변수가 존재하지 않는 처럼 사용하는Get-Process notepad -handle 251, cmdlet 는 오류를 표시하는handle매개 변수가 유효하지 않습니다. 그런 다음 cmdlet 은notepad프로세스의 세부 정보를 표시하지 않고 종료됩니다.,

오류가 발생하기 때문에 매개 변수가 잘못된

아닌 종료하는 오류를

아닌 종료하는 오류를는 오류를 하지 않는지 스크립트를 실행하는 명령입니다. 예를 들어 아래 코드를 확인하십시오. 이 코드는 파일 목록에서 파일 이름 목록을 가져옵니다.txt 파일. 그런 다음 스크립트는 각 파일 이름을 거쳐 각 파일의 내용을 읽고 화면에 출력합니다.

$file_list = Get-Content .\filelist.txtforeach ($file in $file_list) { Write-Output "Reading file $file" Get-Content $file}

파일 목록의 내용.,txt 파일은 파일 이름이 아래 목록에 표시됩니다.나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.로그가 실제로 존재하지 않았습니까? 코드를 실행할 때 스크립트가 File_6 을 찾을 수 없기 때문에 오류가 발생할 것으로 예상됩니다.로그. 아래 그림과 비슷한 출력이 표시됩니다.

의 예로 종료되는 오류가

에서 볼 수 있듯이 스크린샷의 결과가 상기에,스크립트를 읽을 수 있는 첫 번째 다섯 개의 파일 목록에 있지만,그것을 읽으려고 파일 File_6.,txt,오류가 반환됩니다. 그런 다음 스크립트는 종료하기 전에 나머지 파일을 계속 읽었습니다. 그것은 종료되지 않았다.

$ErrorActionPreference 변수

지금까지 종료 및 비 종료 오류와 서로 어떻게 다른지에 대해 배웠습니다. 그러나 종료되지 않은 오류가 종료 오류로 처리되도록 강제 할 수 있다는 것을 알고 계셨습니까?

PowerShell 에는 기본 설정 변수라는 개념이 있습니다. 이러한 변수는 PowerShell 이 여러 가지 방식으로 동작하는 방식을 변경하는 데 사용됩니다. 이러한 변수 중 하나는$ErrorActionPreference라고합니다.,

$ErrorActionPreference변수는 PowerShell 이 비 종료 오류를 처리하는 방식을 변경하는 데 사용됩니다. 기본적으로$ErrorActionPreference값은Continue로 설정됩니다. $ErrorActionPreference변수의 값을STOP로 변경하면 PowerShell 이 모든 오류를 종료 오류로 처리합니다.

아래 코드를 사용하여$ErrorActionPreference값을 변경하십시오.,

$ErrorActionPreference = "STOP"

에 대해 자세히 알아보려면 유효$ErrorActionPreference 변수 값을 방문,PowerShell ErrorActionPreference.

이제이 기사의 비 종료 오류 섹션에서 사용 된 예제를 다시 참조하십시오. 스크립트를 수정할 수 있습을 포함 변화$ErrorActionPreference코드와 같은 다음과 같습니다:

실행된 코드는 위의 행동을 다르게 이전보다면$ErrorActionPreference값으로 설정의 기본값은Continue.,

강제 종료를 사용하여 오류가$ErrorActionPreferencevariable

에서 볼 수 있듯이 스크린샷의 결과를 위, 스크립트를 읽을 수 있는 첫 번째 다섯 개의 파일 목록에 있지만,그것을 읽으려고 파일 File_6.파일을 찾을 수 없기 때문에 오류가 반환됩니다. 그런 다음 스크립트가 종료되고 나머지 파일은 읽지 않습니다.,

$ErrorActionPreference값은 현재 PowerShell 세션에서만 유효합니다. 새로운 PowerShell 세션이 시작되면 기본값으로 재설정됩니다.

이 ErrorAction 일반적인 매개 변수

경우에는$ErrorActionPreference값을 적용 PowerShell 세션,ErrorAction매개변수에 적용되는 모든용 skype 지원하는 공통 매개 변수입니다. ErrorAction매개 변수는 동일한 값을$ErrorActionPreference변수는 않습니다.,

ErrorAction매개 변수 값이$ErrorActionPreference값보다 우선합니다.다시 돌아가서 이전 예제에서 동일한 코드를 사용합시다. 그러나 이번에는ErrorAction매개 변수가Get-Content라인에 추가됩니다.

실행한 후에는 변경된 코드에,당신은 당신이 볼 것이지만$ErrorActionPreference설정Continue스크립트는 여전히 종료된 후 오류가 발생했습니다., 스크립트의 종료되기 때문에-ErrorAction매개 변수 값에서Get-Content설정STOP.

강제 종료를 사용하여 오류가ErrorAction매개 변수

PowerShell 사용하려고 Catch 블록

이 시점에서, 에 대해 알아보았으므로 PowerShell 오류를 어떻게$ErrorActionPreferenceErrorAction매개 변수를 작동합니다., 이제 powershellTry Catch Finally블록 인 좋은 물건에 대해 배울 때입니다.

PowerShelltry catch블록(및 선택 사항finally block)하는 방법 그물을 던져 주위에 코드 조각을 잡을 어떠한 오류는 반환합니다.

아래 코드는Try문의 구문을 보여줍니다.

try { <statement list>}catch *]{ <statement list>}finally { <statement list>}

Try블록의 코드가 포함되어 원하는 PowerShell 하”시도”고 모니터링을 위한 오류가 있습니다., 는 경우에는 코드는Try블록에 오류가 발생하면 오류가 추가하는$Error변수와 그런 다음 전달을Catchblock.

Catch블록을 포함한 조치를 실행하를 받을 때의 오류에서Tryblock. ATry문에 여러 개의Catch블록이있을 수 있습니다.

Finally블록은Try문의 끝에 해당 코드를 포함합니다., 이 블록은 오류가 감지되지 않았는지 여부와 상관없이 실행됩니다.

를 잡는 비은 특정 오류(Catch-All)

간단한Try성명을 포함하는TryCatchblock. Finally블록은 선택 사항입니다.

예를 들어,비특이적 예외를 잡으려면Catch매개 변수가 비어 있어야합니다. 예 아래 코드를 사용하는 스크립트와 동일한 스크립트에서 사용되었다는$ErrorActionPreference 변 섹션에서만 사용하도록 수정하는Try Catch블록이 있습니다.,

에서 볼 수 있듯 아래 코드,이번foreach문으로 묶은 내부에는Tryblock. 그는Catch블록에 포함되를 표시하는 코드를 문자열An Error Occurred오류가 발생한 경우 일이 일어났습니다. Finally블록의 코드는$Error변수를 지 웁니다.위의 코드는 PowerShell 에서 실행 한 후 아래에 표시된이 출력을 제공합니다.,

스크립트를 종료할 때 오류가 발생했

출력을 위에 보여줍니다 스크립트 오류가 발생했,실행 코드 안에Catch블록,다음을 종료됩니다.오류 처리의 요점이었던 오류가 처리되었습니다. 그러나 표시된 오류는 너무 일반적이었습니다. 하여 보다 자세한 설명이 포함된 오류가 발생하면,당신은에 액세스할 수 있는Exception속성의 오류에 의해 전달 되었Tryblock.,

아래 코드를 수정,특히 코드 안에Catch블록을 표시하는 예외 메시지가에서는 현재 오류는 아래로 통과되었 파이프라인–$PSItem.Exception.Message

이번에는,때 수정된 위의 코드를 실행하면 메시지가 표시되는 많은 설명을 포함합니다.,

스크립트를 종료한 설명이 포함된 오류 메시지와 함께

길을 끄는 특정 오류가

이있을 때 시간이 모두 포괄하는 오류 처리하지 않은 가장 적절한 방법이다. 아마도 스크립트가 발생하는 오류 유형에 따라 달라지는 작업을 수행하기를 원할 것입니다.오류 유형을 어떻게 결정합니까? 마지막 오류의Exception속성의TypeName값을 확인하여., 예를 들어 오류를 발견 유형에서 이전를 들어,다음과 같은 명령을 사용합니다.

$Error.Exception | Get-Member

의 결과로 위의 코드는 것이 아래 스크린샷처럼 표시됩니다. 보시다시피TypeName값이 표시됩니다–System.Management.Automation.ItemNotFoundException.

는 오류형 이 값

이제 당신이 알고있는 오류를 입력해야 하는 차단하는 코드를 수정하여 그것을 잡으니다., 아래의 수정 된 코드에서 볼 수 있듯이 이제 두 개의Catch블록이 있습니다. 첫 번째Catch블록은 특정 유형의 오류(System.Management.Automation.ItemNotFoundException)를 가로 챕니다. 반면 두 번째Catch블록에는 일반적인 catch-all 오류 메시지가 포함됩니다.

아래 스크린 샷은 위의 수정 된 코드의 출력을 보여줍니다.,

스크립트로 종결된 특정 오류 메시지가

결론

이 문서에서,당신은 배의 오류에 대 PowerShell,그것의 속성을 확인할 수 있는 방법을 오류의 특정 유형입니다. 당신도 배운 사이의 차이는 방법$ErrorActionPreferenceErrorAction매개 변수에 영향을 미치는 방법 PowerShell 취급 비 종료하는 오류가 있습니다.,

있도를 사용하는 방법을 배웠 PowerShellTry Catch Finally블록을 수행하는 오류를 처리하는지 여부에 대한 특정한 또는 오류를 모두 포괄하는 접근 방식이다.

이 기사에 표시된 예제는Try Catch Finally블록이 어떻게 작동하는지에 대한 기본 사항 만 보여줍니다. 지식 나는 당신이 얻고있는 이 문서를 제공해야를 시작 블록을 적용을 시작에서 오류 처리하는 스크립트.,

추가 읽기

  • About_Try_Catch_Finally
  • About_Automatic_Variables
  • 기초를 다시:PowerShell foreach 루프
  • 다시 기본 사항 이해 PowerShell 개체

답글 남기기

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