항목
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