ErrorRecord 개체 해석

대부분의 경우 System.Management.Automation.ErrorRecord 개체는 명령 또는 스크립트에서 생성되는 종료되지 않는 오류를 나타냅니다. 종료 오류는 System.Management.Automation.IContainsErrorRecord 인터페이스를 통해 ErrorRecord의 추가 정보를 지정할 수도 있습니다.

명령 또는 스크립트 실행 중에 발생하는 특정 오류를 처리하기 위해 스크립트 또는 호스트에 오류 처리기를 작성하려면 system.Management.Automation.ErrorRecord 개체를 해석하여 처리하려는 오류 클래스를 나타내는지 여부를 확인해야 합니다.

cmdlet에서 종료 또는 종료가 아닌 오류가 발생하면 오류 조건을 설명하는 오류 레코드를 만들어야 합니다. 호스트 애플리케이션은 이러한 오류 레코드를 조사하고 오류를 완화하는 작업을 수행해야 합니다. 또한 호스트 애플리케이션은 레코드를 처리하지 못했지만 계속할 수 있었던 종료되지 않는 오류에 대해 오류 레코드를 조사해야 하며 파이프라인이 중지된 오류를 종료하기 위해 오류 레코드를 조사해야 합니다.

비고

오류를 종료하기 위해 cmdlet은 System.Management.Automation.Cmdlet.ThrowTerminatingError 메서드를 호출합니다. 종료가 아닌 오류의 경우 cmdlet은 System.Management.Automation.Cmdlet.WriteError 메서드를 호출합니다.

오류 레코드 디자인

오류 레코드는 예외에서 사용할 수 없는 추가 오류 정보를 제공하는 동시에 각 오류 레코드의 결합된 정보가 고유하도록 설계되었습니다. 이러한 고유성을 통해 호스트 애플리케이션은 오류 조건과 호스트가 수행해야 하는 작업을 식별할 수 있도록 오류 레코드의 여러 부분을 검사할 수 있습니다.

오류 레코드 해석

오류 레코드의 여러 부분을 검토하여 오류를 식별할 수 있습니다. 이러한 부분은 다음과 같습니다.

  • 오류 범주

  • 오류 예외

  • FQID(정규화된 오류 식별자)

  • 기타 정보

오류 범주

오류 레코드의 오류 범주는 System.Management.Automation.ErrorCategory 열거형에서 제공하는 미리 정의된 상수 중 하나입니다. 이 정보는 System.Management.Automation.ErrorRecord 개체의 System.Management.Automation.ErrorRecord.CategoryInfo 속성을 통해 사용할 수 있습니다.

cmdlet은 CloseError, OpenError, InvalidType, ReadError 및 WriteError 범주 및 기타 오류 범주를 지정할 수 있습니다. 호스트 애플리케이션은 오류 범주를 사용하여 오류 그룹을 캡처할 수 있습니다.

예외

오류 레코드에 포함된 예외는 cmdlet에서 제공하며 System.Management.Automation.ErrorRecord 개체의 System.Management.Automation.ErrorRecord.Exception 속성을 통해 액세스할 수.

호스트 애플리케이션은 is 키워드를 사용하여 예외가 특정 클래스 또는 파생 클래스인지 식별할 수 있습니다. 다음 예제와 같이 예외 형식에서 분기하는 것이 좋습니다.

`if (MyNonTerminatingError.Exception is AccessDeniedException)`
{
  ...
}

이렇게 하면 파생 클래스를 catch합니다. 그러나 예외가 역직렬화되는 경우 문제가 있습니다.

The FQID

FQID는 오류를 식별하는 데 사용할 수 있는 가장 구체적인 정보입니다. cmdlet 정의 식별자, cmdlet 클래스의 이름 및 오류를 보고한 원본을 포함하는 문자열입니다. 일반적으로 오류 레코드는 Windows 이벤트 로그의 이벤트 레코드와 유사합니다. FQID는 이벤트 레코드의 클래스를 식별하는 다음 튜플과 유사합니다. (로그 이름, 원본, 이벤트 ID).

FQID는 단일 문자열로 검사되도록 설계되었습니다. 그러나 오류 식별자가 호스트 애플리케이션에서 구문 분석되도록 설계된 경우가 있습니다. 다음 예제는 올바른 형식의 정규화된 오류 식별자입니다.

CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand.

이전 예제에서 첫 번째 토큰은 오류 식별자이며 그 뒤에 cmdlet 클래스의 이름이 잇습니다. 오류 식별자는 단일 토큰이거나 식별자를 검사할 때 분기할 수 있는 점으로 구분된 식별자일 수 있습니다. 오류 식별자에 공백이나 문장 부호를 사용하지 마세요. 쉼표는 사용하지 않는 것이 특히 중요합니다. 쉼표는 Windows PowerShell에서 식별자와 cmdlet 클래스 이름을 구분하는 데 사용됩니다.

기타 정보

System.Management.Automation.ErrorRecord 개체는 오류가 발생한 환경을 설명하는 정보를 제공할 수도 있습니다. 이 정보에는 오류 세부 정보, 호출 정보 및 오류가 발생했을 때 처리 중인 대상 개체와 같은 항목이 포함됩니다. 이 정보는 호스트 애플리케이션에 유용할 수 있지만 일반적으로 오류를 식별하는 데 사용되지는 않습니다. 이 정보는 다음 속성을 통해 사용할 수 있습니다.

  • system.Management.Automation.ErrorRecord.ErrorDetails

  • System.Management.Automation.ErrorRecord.InvocationInfo

  • System.Management.Automation.ErrorRecord.TargetObject

또한 참조하십시오

  • System.Management.Automation.ErrorRecord

  • System.Management.Automation.ErrorCategory

  • system.Management.Automation.ErrorCategoryinfo

  • System.Management.Automation.Cmdlet.WriteError

  • system.Management.Automation.Cmdlet.ThrowTerminatingError*

  • Cmdlet 종료하지 않는 오류 보고 추가

  • windows PowerShell 오류 보고

  • Windows PowerShell Cmdlet 작성