about_Functions_Advanced_Methods

업데이트 날짜: 2014년 5월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

항목

about_Functions_Advanced_Methods

간단한 설명

CmdletBinding 특성을 지정하는 함수에서 컴파일된 cmdlet에 사용할 수 있는 메서드와 속성을 사용하는 방법을 설명합니다.

자세한 설명

CmdletBinding 특성을 지정하는 함수는 $pscmdlet 변수를 통해 다양한 메서드와 속성에 액세스할 수 있습니다. 이러한 메서드는 다음과 같습니다.

- 작업을 수행하는 데 사용되는 cmdlet을 컴파일한 입력 처리 메서드.

- 작업을 수행하기 전에 사용자 피드백을 가져오는 데 사용되는 ShouldProcess 및 ShouldContinue 메서드.

- 오류 레코드를 생성하는 데 사용되는 ThrowTerminatingError 메서드.

- 다양한 출력을 반환하는 여러 Write 메서드.

PSCmdlet 클래스의 모든 메서드 및 속성을 고급 함수에 사용할 수 있습니다. 이들 메서드와 속성에 대한 자세한 내용은 MSDN(Microsoft Developer Network) Library에서 System.Management.Automation.PSCmdlet(https://go.microsoft.com/fwlink/?LinkId=142139)(영문)을 참조하세요.

입력 처리 메서드

이 섹션에 설명된 메서드를 입력 처리 메서드라고 합니다. 함수에서 이 세 가지 메서드는 함수의 Begin, Process 및 End 블록으로 표시됩니다. 각 함수에는 이들 블록이 하나 이상 포함되어야 합니다. Windows PowerShell® 런타임은 함수를 실행할 때 이들 블록 내에서 코드를 사용합니다. CmdletBinding 특성을 사용하지 않는 함수에서도 이들 블록을 사용할 수 있습니다.

Begin

이 블록은 함수에 대한 선택적 일회성 전처리를 제공하는 데 사용됩니다. Windows PowerShell 런타임은 파이프라인에서 함수의 각 인스턴스에 이 블록의 코드를 한 번 사용합니다.

Process

이 블록은 함수에 대한 레코드별 처리를 제공하는 데 사용됩니다. 이 블록은 함수에 대한 입력에 따라 전혀 사용하지 않거나 제한 없이 사용할 수 있습니다. 예를 들어 함수가 파이프라인의 첫 번째 명령이면 Process 블록은 한 번 사용됩니다. 함수가 파이프라인의 첫 번째 명령이 아니면 Process 블록은 함수가 파이프라인에서 받는 모든 입력에 한 번 사용됩니다. 파이프라인 입력이 없으면 Process 블록이 사용되지 않습니다.

함수 매개 변수가 파이프라인 입력을 받아들이도록 설정되면 이 블록을 정의해야 합니다. 이 블록을 정의하지 않고 매개 변수가 파이프라인에서 입력을 받아들이면 함수는 파이프라인을 통해 함수에 전달되는 값을 무시합니다.

또한 함수가 확인 요청을 지원하면(Parameter 특성의 SupportsShouldProcess 매개 변수가 $True로 설정되면) ShouldProcess 메서드 호출이 Process 블록 내에서 이루어져야 합니다.

End

이 블록은 함수에 대한 선택적 일회성 후처리를 제공하는 데 사용됩니다.

다음 예제에서는 일회성 전처리용 Begin 블록, 여러 레코드 처리용 Process 블록 및 일회성 후처리용 End 블록이 포함된 함수의 개요를 보여 줍니다.

          Function Test-ScriptCmdlet
          {
            [CmdletBinding(SupportsShouldProcess=$True)] 
            Param ($Parameter1)
            Begin{}
            Process{}
            End{}
          }

확인 메서드

ShouldProcess

이 메서드를 호출하여 함수가 시스템을 변경하는 작업을 수행하기 전에 사용자의 확인을 요청합니다. 이 함수는 메서드에서 반환되는 부울 값에 따라 계속될 수 있습니다. 이 메서드는 함수의 Process{} 블록 내에서만 호출할 수 있습니다. 또한 이전 예제와 같이 함수에서 ShouldProcess를 지원하는 CmdletBinding 특성을 선언해야 합니다.

이 메서드에 대한 자세한 내용은 MSDN Library에서 System.Management.Automation.Cmdlet.ShouldProcess(https://go.microsoft.com/fwlink/?LinkId=142142)(영문)를 참조하세요.

확인을 요청하는 방법에 대한 자세한 내용은 MSDN Library에서 "확인 요청"(https://go.microsoft.com/fwlink/?LinkID=136658)을 참조하세요.

ShouldContinue

이 메서드를 호출하여 두 번째 확인 메시지를 요청합니다. ShouldProcess 메서드에서 $true를 반환하면 이 메서드를 호출해야 합니다. 이 메서드에 대한 자세한 내용은 MSDN Library에서 System.Management.Automation.Cmdlet.ShouldContinue(https://go.microsoft.com/fwlink/?LinkId=142143)(영문)를 참조하세요.

오류 메서드

함수는 오류가 발생할 때 두 가지 메서드를 호출할 수 있습니다. 종료되지 않는 오류가 발생하면 함수는 "Write 메서드" 섹션에서 설명되는 WriteError 메서드를 호출해야 합니다. 종료 오류가 발생하고 함수가 계속될 수 없으면 함수는 ThrowTerminatingError 메서드를 호출해야 합니다. 종료 오류에 Throw 문을 사용하고 종료되지 않는 오류에 Write-Error cmdlet을 사용할 수도 있습니다.

자세한 내용은 MSDN Libray에서 System.Management.Automation.Cmdlet.ThrowTerminatingError(https://go.microsoft.com/fwlink/?LinkId=142144)(영문)를 참조하세요.

WRITE 메서드

함수는 다음 메서드를 호출하여 다양한 출력을 반환할 수 있습니다. 일부 출력은 파이프라인의 다음 명령으로 이동하지 않습니다. Write-Error 등의 다양한 Write cmdlet을 사용할 수도 있습니다.

WriteCommandDetail

WriteCommandDetails 메서드에 대한 자세한 내용은 MSDN Library에서 System.Management.Automation.Cmdlet.WriteCommandDetail(https://go.microsoft.com/fwlink/?LinkId=142155)(영문)을 참조하세요.

WriteDebug

함수 문제를 해결하는 데 사용할 수 있는 정보를 제공하려면 함수가 WriteDebug 메서드를 호출하도록 지정합니다. 그러면 사용자에게 디버그 메시지가 표시됩니다. 자세한 내용은 MSDN Libray에서 System.Management.Automation.Cmdlet.WriteDebug(https://go.microsoft.com/fwlink/?LinkId=142156)(영문)를 참조하세요.

WriteError

함수는 종료되지 않는 오류가 발생하고 레코드 처리를 계속하도록 디자인되었을 때 이 메서드를 호출해야 합니다. 자세한 내용은 MSDN Libray에서 System.Management.Automation.Cmdlet.WriteError(https://go.microsoft.com/fwlink/?LinkId=142157)(영문)를 참조하세요.

참고:

종료 오류가 발생하면 함수는 ThrowTerminatingError 메서드를 호출해야 합니다.

WriteObject

이 메서드를 사용하면 함수가 개체를 파이프라인의 다음 명령으로 보낼 수 있습니다. 대부분 이 메서드는 함수가 데이터를 반환할 때 사용됩니다. 자세한 내용은 MSDN Libray에서 System.Management.Automation.PSCmdlet.WriteObject(https://go.microsoft.com/fwlink/?LinkId=142158)(영문)를 참조하세요.

WriteProgress

작업을 완료하는 데 오래 걸리는 함수에서 이 메서드를 사용하면 함수가 WriteProgress 메서드를 호출할 수 있으므로 진행 정보가 표시됩니다. 예를 들어 완료율을 표시할 수 있습니다. 자세한 내용은 MSDN Libray에서 System.Management.Automation.PSCmdlet.WriteProgress(https://go.microsoft.com/fwlink/?LinkId=142160)(영문)를 참조하세요.

WriteVerbose

함수가 수행하는 작업에 대한 세부 정보를 제공하려면 함수가 WriteVerbose 메서드를 호출하여 사용자에게 자세한 메시지를 표시하도록 지정합니다. 기본적으로 자세한 메시지는 표시되지 않습니다. 자세한 내용은 MSDN Libray에서 System.Management.Automation.PSCmdlet.WriteVerbose(https://go.microsoft.com/fwlink/?LinkId=142162)(영문)를 참조하세요.

WriteWarning

예기치 않은 결과를 가져오는 조건에 대한 정보를 제공하려면 함수가 WriteWarning 메서드를 호출하여 사용자에게 경고 메시지를 표시하도록 지정합니다. 기본적으로 경고 메시지는 표시됩니다. 자세한 내용은 MSDN Libray에서 System.Management.Automation.PSCmdlet.WriteWarning(https://go.microsoft.com/fwlink/?LinkId=142164)(영문)을 참조하세요.

참고:

WarningPreference 변수를 구성하거나 Verbose 및 Debug 명령줄 옵션을 사용하여 경고 메시지를 표시할 수도 있습니다.

기타 메서드 및 속성

$PSCmdlet 변수를 통해 액세스할 수 있는 기타 메서드 및 속성에 대한 자세한 내용은 MSDN Library에서 System.Management.Automation.PSCmdlet(https://go.microsoft.com/fwlink/?LinkId=142139)(영문)을 참조하세요.

예를 들어 ParameterSetName 속성을 사용하여 사용 중인 매개 변수 집합을 확인할 수 있습니다. 매개 변수 집합을 사용하여 함수가 실행될 때 지정된 매개 변수에 따라 다른 작업을 수행하는 함수를 만들 수 있습니다.

참고 항목

about_Functions

about_Functions_Advanced

about_Functions_Advanced_Parameters

about_Functions_CmdletBindingAttribute

about_Functions_OutputTypeAttribute