항목 about_Functions_Advanced_Methods 간단한 설명 CmdletBinding 특성을 지정하는 함수가 컴파일된 cmdlet에 사용할 수 있는 메서드와 속성을 어떻게 사용할 수 있는지에 대해 설명합니다. 자세한 설명 CmdletBinding 특성을 지정하는 함수는 $pscmdlet 변수를 통해 여러 메서드와 속성에 액세스할 수 있습니다. 이러한 메서드에는 다음과 같은 메서드가 있습니다. - 컴파일된 cmdlet에서 작업을 수행할 때 사용하는 입력 처리 메서드 - 작업을 수행하기 전에 사용자 피드백을 받을 때 사용하는 ShouldProcess 및 ShouldContinue 메서드 - 오류 레코드를 생성하는 ThrowTerminatingError 메서드 - 다양한 출력 유형을 반환하는 여러 Write 메서드 - 다양한 출력 유형을 반환하는 여러 Write 메서드 PSCmdlet 클래스의 모든 메서드와 속성은 고급 함수에 사용할 수 있습니다. 이러한 메서드와 속성에 대한 자세한 내용은 MSDN(Microsoft Developer Network) 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142139)의 System.Management.Automation.PSCmdlet를 참조하십시오. 입력 처리 메서드 이 절에서 설명하는 메서드를 입력 처리 메서드라고 합니다. 함수에서 이러한 세 가지 메서드는 함수의 Begin, Process 및 End 블록으로 나타냅니다. 각 함수에는 이러한 블록이 한 개 이상 있어야 합니다. Windows PowerShell 런타임은 함수를 실행할 때 이러한 블록 내의 코드를 사용합니다. 이러한 블록은 CmdletBinding 속성을 사용하지 않는 함수에 사용할 수도 있습니다. Begin 이 블록은 함수에 선택적인 일회성 전처리를 제공하는 데 사용됩니다. Windows PowerShell 런타임은 파이프라인에서 함수의 각 인스턴스에 이 블록의 코드를 한 번 사용합니다. Process 이 블록은 함수에 레코드별 처리를 제공하는 데 사용됩니다. 함수에 대한 입력에 따라 이 블록을 여러 번 사용하거나 전혀 사용하지 않을 수 있습니다. 예를 들어 함수가 파이프라인에서 첫 번째 명령인 경우 Process 블록이 한 번 사용됩니다. 함수가 파이프라인에서 첫 번째 명령이 아닌 경우 함수가 파이프라인으로부터 받는 모든 입력에 대해 Process 블록이 한 번 사용됩니다. 파이프라인 입력이 없을 경우 Process 블록이 사용되지 않습니다. 함수 매개 변수가 파이프라인 입력을 받도록 설정된 경우 이 블록을 정의해야 합니다. 이 블록을 정의하지 않고 매개 변수가 파이프라인으로부터 입력을 받는 경우 함수는 파이프라인을 통해 함수에 전달되는 값을 받지 못합니다. 또한 Parameter 특성의 SupportsShouldProcess 매개 변수가 $True로 설정되어 함수가 확인 요청을 지원하는 경우 Process 블록 내에서 ShouldProcess 메서드를 호출해야 합니다. End 이 블록은 함수에 선택적인 일회성 후처리를 제공하는 데 사용됩니다. 다음 예에서는 일회성 전처리를 위한 Begin 블록, 여러 레코드 처리를 위한 Process 블록 및 일회성 후처리를 위한 End 블록이 있는 함수에 대한 개요를 보여 줍니다. Function Test-ScriptCmdlet { [CmdletBinding(SupportsShouldProcess=$True)] Param ($Parameter1) Begin{} Process{} End{} } 확인 메서드 ShouldProcess 이 메서드는 함수가 시스템을 변경하는 동작을 수행하기 전에 사용자로부터 확인을 요청할 때 호출됩니다. 함수는 이 메서드에서 반환한 부울 값을 기준으로 계속할 수 있습니다. 이 메서드는 함수의 Process{} 블록 내에서만 호출할 수 있습니다. 또한 이전 예제와 같이 함수에서 ShouldProcess를 지원하는 CmdletBinding 속성을 선언해야 합니다. 이 메서드에 대한 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142142)의 System.Management.Automation.Cmdlet.ShouldProcess를 참조하십시오. 확인을 요청하는 방법에 대한 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkID=136658)의 "Requesting Confirmation(확인 요청)"을 참조하십시오. ShouldContinue 이 메서드는 두 번째 확인 메시지를 요청할 때 호출되며 ShouldProcess 메서드가 $true를 반환할 때 호출되어야 합니다. 이 메서드에 대한 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142143)의 System.Management.Automation.Cmdlet.ShouldContinue를 참조하십시오. 오류 메서드 오류가 발생했을 때 함수는 두 개의 다른 메서드를 호출할 수 있습니다. 종료되지 않는 오류가 발생하는 경우 함수는 "Write 메서드" 단원에서 설명한 WriteError 메서드를 호출해야 합니다. 종료되는 오류가 발생하고 함수를 계속 사용할 수 없는 경우 함수는 ThrowTerminatingError 메서드를 호출해야 합니다. 종료되는 오류에 Throw 문을 사용하고 종료되지 않는 오류에 Write-Error cmdlet을 사용할 수도 있습니다. 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142144)의 System.Management.Automation.Cmdlet.ThrowTerminatingError를 참조하십시오. Write 메서드 함수에서 다음 메서드를 호출하여 다양한 출력 유형을 반환할 수 있습니다. 모든 출력이 파이프라인의 다음 명령으로 이동하는 것은 아닙니다. Write-Error와 같은 다양한 Write cmdlet을 사용할 수도 있습니다. WriteCommandDetail WriteCommandDetails 메서드에 대한 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142155)의 System.Management.Automation.Cmdlet.WriteCommandDetail을 참조하십시오. WriteDebug 함수 문제를 해결하는 데 사용할 수 있는 정보를 제공하려면 함수에서 WriteDebug 메서드를 호출하도록 합니다. 이렇게 하면 사용자에게 디버그 메시지가 표시됩니다. 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142156)의 System.Management.Automation.Cmdlet.WriteDebug를 참조하십시오. WriteError 종료되지 않는 오류가 발생하고 함수가 레코드를 계속 처리하도록 지정된 경우 함수는 이 메서드를 호출해야 합니다. 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142157)의 System.Management.Automation.Cmdlet.WriteError를 참조하십시오. 참고: 종료되는 오류가 발생하는 경우 함수는 ThrowTerminatingError 메서드를 호출해야 합니다. WriteObject 이 메서드를 사용하면 함수가 파이프라인의 다음 명령으로 개체를 보낼 수 있습니다. 대부분의 경우 함수가 데이터를 반환할 때 이 메서드를 사용합니다. 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142158)의 System.Management.Automation.PSCmdlet.WriteObject를 참조하십시오. WriteProgress 작업을 완료하는 데 시간이 오래 걸리는 함수의 경우 이 메서드를 사용하면 진행률 정보가 표시되도록 함수가 WriteProgress 메서드를 호출할 수 있습니다. 예를 들어 완료된 백분율을 표시할 수 있습니다. 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142160)의 System.Management.Automation.PSCmdlet.WriteProgress를 참조하십시오. WriteVerbose 함수가 수행하는 작업에 대한 세부 정보를 제공하기 위해 WriteVerbose 메서드를 호출하여 사용자에게 자세한 정보 표시 메시지를 표시하도록 할 수 있습니다. 자세한 정보 메시지는 기본적으로 표시되지 않습니다. 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142162)의 System.Management.Automation.PSCmdlet.WriteVerbose를 참조하십시오. WriteWarning 예기치 않은 결과를 가져올 수 있는 조건에 대한 정보를 제공하기 위해 함수에서 WriteWarning 메서드를 호출하여 사용자에게 경고 메시지를 표시하도록 할 수 있습니다. 경고 메시지는 기본적으로 표시됩니다. 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142164)의 System.Management.Automation.PSCmdlet.WriteWarning을 참조하십시오. 참고: WarningPreference 변수를 구성하거나 Verbose 및 Debug 명령줄 옵션을 사 용하여 경고 메시지를 표시할 수도 있습니다. 다른 메서드 및 속성 $PSCmdlet 변수를 통해 액세스할 수 있는 다른 메서드와 속성에 대한 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=142139)의 System.Managemen t.Automation.PSCmdlet를 참조하십시오. 예를 들어 ParameterSetName 속성을 사용하면 사용되는 매개 변수를 볼 수 있습니다. 매개 변수 집합을 사용하면 함수를 실행할 때 지정한 매개 변수를 기준으로 여러 작업을 수행하는 함수를 만들 수 있습니다. 참고 항목 about_Functions_Advanced about_Functions_CmdletBindingAttributes about_Functions_Advanced_Parameters