about_Functions_Advanced

업데이트 날짜: 2014년 5월

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

항목

about_Functions_Advanced

간단한 설명

cmdlet과 유사하게 작동하는 고급 함수에 대해 소개합니다.

자세한 설명

고급 함수를 사용하면 cmdlet으로 수행할 수 있는 작업과 유사한 작업을 수행할 수 있는 함수를 작성할 수 있습니다. 고급 함수는 Microsoft .NET Framework 언어를 사용하여 컴파일된 cmdlet을 작성하지 않고 신속하게 함수를 작성하려는 경우에 유용합니다. 이러한 함수는 컴파일된 cmdlet의 기능을 제한하려는 경우 또는 컴파일된 cmdlet과 유사한 함수를 작성하려는 경우에도 유용합니다.

컴파일된 cmdlet과 고급 함수 작성에는 차이가 있습니다. 컴파일된 cmdlet은 C#과 같은 .NET Framework 언어로 작성해야 하는 .NET Framework 클래스입니다. 반면 고급 함수는 다른 함수나 스크립트 블록을 작성할 때와 같은 방식으로 Windows PowerShell® 스크립트 언어를 사용하여 작성합니다.

고급 함수에서는 CmdletBinding 특성을 사용하여 고급 함수를 cmdlet과 유사하게 작동하는 함수로 식별합니다. CmdletBinding 특성은 컴파일된 cmdlet 클래스에서 클래스를 cmdlet으로 식별하는 데 사용되는 Cmdlet 특성과 유사합니다. 이 특성에 대한 자세한 내용은 about_Functions_CmdletBindingAttribute를 참조하세요.

다음 예제에서는 이름을 허용한 다음 제공된 이름을 사용하여 인사말을 출력하는 함수를 보여 줍니다. 또한 이 함수는 컴파일된 cmdlet의 동사-명사 쌍과 유사하게 동사(Send)와 명사(Greeting) 쌍을 포함하는 이름을 정의합니다. 그러나 함수에는 동사-명사 이름이 없어도 됩니다.

        function Send-Greeting
        {
          [CmdletBinding()]
          Param(
              [Parameter(Mandatory=$true)]
              [string] $Name
          )
          Process
          {
            write-host ("Hello " + $Name + "!")
          }
        }

함수의 매개 변수는 Parameter 특성을 사용하여 선언됩니다. 이 특성은 단독으로 사용하거나 Alias 특성 또는 여러 가지 다른 매개 변수 유효성 검사 특성과 함께 사용할 수 있습니다. 런타임에 추가되는 동적 매개 변수를 포함하여 매개 변수를 선언하는 방법에 대한 자세한 내용은 about_Functions_Advanced_Parameters를 참조하세요.

이전 함수의 실제 작업은 Process 블록에서 수행되며, 이 블록은 컴파일된 cmdlet에서 cmdlet에 전달된 데이터를 처리하는 데 사용하는 ProcessingRecord 메서드와 유사합니다. Begin 및 End 블록과 함께 이 블록은 about_Functions_Advanced_Methods 항목에서 설명 합니다.

고급 함수는 다음과 같은 측면에서 컴파일된 cmdlet과 다릅니다.

- 고급 함수 매개 변수 바인딩에서는 문자열의 배열이 Boolean 매개 변수에 바인딩될 때 예외를 throw하지 않습니다.

- ValidateSet 특성 및 ValidatePattern 특성은 명명된 매개 변수를 전달할 수 없습니다.

- 고급 함수는 트랜잭션에서 사용할 수 없습니다.

참고 항목

about_Functions

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_CmdletBindingAttribute

about_Functions_OutputTypeAttribute

Windows PowerShell Cmdlet(https://go.microsoft.com/fwlink/?LinkID=135279)