항목
    about_Functions

간단한 설명
    Windows PowerShell에서 함수를 만들고 사용하는 방법을 설명합니다. 


자세한 설명
    함수는 사용자가 할당한 이름을 가진 문 목록입니다. 함수를 실행할 때 함수 이름을 입력합니다. 목록의 문은 명령 
    프롬프트에 문을 입력한 것처럼 실행됩니다. 

    함수는 cmdlet처럼 매개 변수를 가질 수 있습니다. 명명된 매개 변수, 위치 매개 변수, 스위치 매개 변수 또는 동적 
    매개 변수 등을 사용할 수 있습니다. 함수 매개 변수는 명령줄이나 파이프라인에서 읽을 수 있습니다. 

    함수는 표시하거나, 변수에 할당하거나, 다른 함수 또는 cmdlet에 전달할 수 있는 값을 반환할 수 있습니다. 

    함수의 문 목록에는 Begin, Process 및 End 키워드를 포함하는 다양한 유형의 문 목록이 포함될 수 있습니다. 
    이러한 문 목록은 파이프라인으로부터의 입력을 서로 다르게 처리합니다.

    필터는 Filter 키워드를 사용하는 특별한 종류의 함수입니다. 

    함수는 cmdlet처럼 동작할 수도 있습니다. C# 프로그래밍을 사용하지 않고 cmdlet처럼 동작하는 함수를 만들 수 
    있습니다. 자세한 내용은 about_Functions_Advanced를 참조하십시오.


  구문
      다음은 함수의 구문입니다.

          function [<scope:>]<name> [([type]$parameter1[,[type]$parameter2])]  
          {
              param([type]$parameter1 [,[type]$parameter2])

              dynamicparam {<statement list>}
  
              begin {<statement list>}
              process {<statement list>}
              end {<statement list>}
          }


      함수에는 다음 항목이 포함됩니다.

          - Function 키워드
          - 범위(선택 사항)
          - 선택한 이름
          - 명명된 매개 변수(선택 사항)(개수 상관없음)
          - 중괄호({})로 묶은 하나 이상의 Windows PowerShell 명령 


      함수의 Dynamicparam 키워드 및 동적 매개 변수에 대한 자세한 내용은 
      about_Functions_Advanced_Parameters를 참조하십시오.


  간단한 함수
      유용한 함수라고 해서 반드시 복잡해야 하는 것은 아닙니다. 다음 함수는 현재 시스템의 System 계정에 속하지 
      않는 환경 변수를 가져옵니다. 

          function other_env 
          { 
             get-wmiObject win32_environment | 
                where {$_.username -ne "<System>"}
          }

      함수를 실행하려면 "other_env"를 입력합니다. 

      유용한 작은 함수로 구성된 도구 상자를 만들 수 있습니다. about_Profiles 및 이 항목의 뒷부분에서 설명한 
      대로 Windows PowerShell 프로필에 이러한 함수를 추가합니다.


  매개 변수를 포함하는 함수
      명명된 매개 변수, 위치 매개 변수, 스위치 매개 변수 및 동적 매개 변수 등과 같은 매개 변수를 함수에 사용할 수 
      있습니다. 함수의 동적 매개 변수에 대한 자세한 내용은 about_Functions_Advanced_Parameters를 
      참조하십시오.


  명명된 매개 변수
      명명된 매개 변수를 원하는 만큼 정의할 수 있습니다. 이 항목의 뒷부분에서 설명한 대로 명명된 매개 변수에 
      대한 기본값을 포함할 수 있습니다.

      다음 예제 구문에서와 같이 Param 키워드를 사용하여 괄호 안에 매개 변수를 정의할 수 있습니다.
    
          function <name> { 
               param ([type]$parameter1[,[type]$parameter2])
               <statement list> 
          }


      다음 예제 구문에서와 같이 Param 키워드를 사용하지 않고 괄호 밖에 매개 변수를 정의할 수도 있습니다.

          function <name> [([type]$parameter1[,[type]$parameter2])] { 
              <statement list> 
          }


      이러한 두 메서드는 차이가 없으므로 원하는 메서드를 사용합니다.

      함수를 실행하면 매개 변수에 대해 지정한 값이 해당 매개 변수 이름을 포함하는 변수에 할당됩니다. 이 변수의 
      값을 함수에 사용할 수 있습니다. 

      다음 예는 Small_files라는 함수입니다. 이 함수에는 $size 매개 변수가 있습니다. 이 함수는 
      $size 매개 변수 값보다 작은 파일을 모두 표시하며 디렉터리는 표시하지 않습니다.

          function small_files {
              param ($size)
              Get-ChildItem c:\ | where {
                  $_.length -lt $size -and !$_.PSIsContainer} 
          }


      함수에서 매개 변수에 대해 이름이 정의된 $size 변수를 사용할 수 있습니다

      이 함수를 사용하려면 다음 명령을 입력합니다.
 
          C:\PS> function small_files -size 50


      명명된 매개 변수에 대한 값을 매개 변수 이름 없이 입력할 수도 있습니다. 예를 들어 다음 명령은 Size 매개 
      변수에 이름을 지정하는 명령과 동일한 결과를 제공합니다.

          C:\PS> function small_files 50


      매개 변수의 기본값을 정의하려면 Small_files 예의 다음 변형에서와 같이 매개 변수 이름 뒤에 등호와 값을 
      입력합니다.

          function small_files ($size = 100) {
              Get-ChildItem c:\ | where {
                  $_.length -lt $size -and !$_.PSIsContainer} 
          }          function small_files ($size = 100) {



      값을 지정하지 않고 "small_files"만 입력하면 이 함수는 $size에 100을 할당합니다. 값을 제공하면 
      함수에서 이 값을 사용합니다.


  위치 매개 변수
      위치 매개 변수는 매개 변수 이름이 없는 매개 변수입니다. 각 매개 변수 값은 매개 변수 값 순서에 따라 함수의 
      매개 변수에 연결됩니다. 

      위치 매개 변수를 사용하는 경우에는 함수 이름 뒤에 값을 하나 이상 입력합니다. 위치 매개 변수 값은 $args 배열 
      변수에 할당됩니다. 함수 이름 다음에 오는 값은 $args 배열에서 첫 번째 위치인 $args[0]에 할당됩니다. 

      다음 Extension 함수는 사용자가 제공하는 파일 이름에 .txt 파일 이름 확장명을 추가합니다.

          function extension {
              $name = $args[0] + ".txt"
              $name
          }

          C:\PS> extension myTextFile
          myTextFile.txt
   
      함수에 여러 개의 위치 매개 변수를 사용할 수 있습니다. 다음 예에서는 함수 이름과 함께 입력한 값을 
      표시합니다.

          function repeat { foreach ($arg in $args) { "The input is $arg" } }

          C:\PS>repeat one 
          The input is one

          C:\PS> repeat one two three
          The input is one
          The input is two 
          The input is three


      이 함수에 값을 원하는 개수만큼 사용할 수 있습니다. 함수는 각 값을 $args 배열의 위치에 할당합니다.


  스위치 매개 변수
      스위치는 값이 필요하지 않은 매개 변수입니다. 대신 함수 이름을 입력하고 그 뒤에 스위치 매개 변수의 이름을 
      입력합니다.

      스위치 매개 변수를 정의하려면 다음 예에서와 같이 매개 변수 이름 앞에 [switch]를 입력합니다.

          function switchExample {
              param ([switch]$on)
              if ($on) { "Switch on" }
              else { "Switch off" }
          }


      함수 이름 뒤에 On 스위치 매개 변수를 입력하면 함수는 "Switch on"을 표시합니다. 스위치 매개 변수가 없으면 
      "Switch off"를 표시합니다.

          C:\PS> SwitchExample -on
          Switch on

          C:\PS> SwitchExample
          Switch off

      다음 예에서와 같이 함수를 실행할 때 스위치에 부울 값을 할당할 수도 있습니다.

          C:\PS> SwitchExample -on:$true
          Switch on

          C:\PS> SwitchExample -on:$false
          Switch off


  함수에 개체 파이프
      모든 함수는 파이프라인으로부터 입력을 받을 수 있습니다. 함수가 Begin, Process 및 End 키워드를 사용하여 
      파이프라인에서 입력을 처리하는 방식을 제어할 수 있습니다. 다음 예제 구문에서는 세 가지 키워드를 보여 
      줍니다.

          function <name> { 
              begin {<statement list>}
              process {<statement list>}
              end {<statement list>}
          }

      Begin 문 목록은 함수 시작 부분에서 한 번만 실행됩니다. 

      Process 문 목록은 파이프라인에서 각 개체에 대해 한 번 실행됩니다.
      Process 블록이 실행되는 동안 각 파이프라인 개체는 한 번에 한 개씩 $_ 자동 변수에 할당됩니다. 

      함수가 파이프라인의 모든 개체를 받으면 End 문 목록이 한 번 실행됩니다. Begin, Process 또는 
      End 키워드를 사용하지 않으면 모든 문이 End 문 목록처럼 처리됩니다.

      다음 함수는 Process 키워드를 사용합니다. 이 함수는 파이프라인의 예제를 표시합니다.

          function pipelineFunction 
          { 
              process {"The value is: $_"} 
          }


      이 함수를 테스트하려면 다음 예에서와 같이 쉼표로 구분하여 숫자 배열을 입력합니다.

          C:\PS> 1,2,4 | pipelineFunction
          The value is: 1
          The value is: 2
          The value is: 4


      파이프라인에 함수를 사용하면 함수에 파이프된 개체가 $input 자동 변수에 할당됩니다. 이 함수는 
      파이프라인으로부터 개체를 받기 전에 Begin 키워드를 포함하는 문을 실행합니다. 파이프라인으로부터 모든 
      개체를 받으면 함수는 End 키워드를 포함하는 문을 실행합니다.

      다음 예에서는 Begin 및 End 키워드가 있는 $input 자동 변수를 보여 줍니다.

          function PipelineBeginEnd 
          {
              begin {"Begin: The input is $input"}
              end {"End:   The input is $input" }
          }


      파이프라인을 사용하여 이 함수를 실행하면 다음 결과가 표시됩니다.

          C:\PS> 1,2,4 | PipelineBeginEnd
          Begin: The input is 
          End:  The input is 1 2 4


      Begin 문이 실행될 때 함수는 파이프라인으로부터 입력을 받지 않습니다. 함수가 값을 받으면 그 다음에 End 
      문이 실행됩니다.

      함수에 Process 키워드가 있으면 $input의 데이터를 읽습니다. 다음 예에는 Process 문 목록이 있습니다.

          function PipelineInput
          {
              process {"Processing:  $_ " }
              end {"End:   The input is: $input" }
          } 

      이 예에서는 함수에 파이프된 각 객체가 Process 문 목록으로 보내집니다. Process 문은 한 번에 하나씩 각 
      개체에서 실행됩니다. 함수가 End 키워드에 도달할 때 $input 자동 변수는 비어 있습니다.

          C:\PS> 1,2,4 | PipelineInput
          Processing: 1 
          Processing: 2 
          Processing: 4 
          End:  The input is:


  필터
      필터는 파이프라인의 각 개체에 대해 실행되는 함수의 한 유형입니다. 필터는 Process 블록에 모든 문을 
      포함하는 함수와 비슷합니다.

      필터 구문은 다음과 같습니다. 

          filter [<scope:>]<name> {<statement list>}

      다음 필터는 파이프라인으로부터 로그 항목을 가져와서 전체 항목 또는 항목의 메시지 부분만 표시합니다.

          filter ErrorLog ([switch]$message)
          {
              if ($message) { out-host -inputobject $_.Message }
              else { $_ }   
          }


  함수 범위
      함수는 해당 함수가 만들어진 범위 내에 존재합니다. 

      함수가 스크립트의 일부이면 해당 스크립트 내의 문에서 함수를 사용할 수 있습니다. 기본적으로 스크립트의 
      함수는 명령 프롬프트에서 사용할 수 없습니다. 

      함수의 범위를 지정할 수 있습니다. 예를 들어 다음 예에서는 전역 범위에 함수가 추가됩니다. 

 
          function global:get-dependentsvs { get-service |
             where {$_.dependentservices} }


      함수가 전역 범위에 있으면 스크립트, 함수 및 명령줄에 함수를 사용할 수 있습니다.

      함수는 일반적으로 범위를 만듭니다. 변수처럼 함수에서 만든 항목은 함수 범위에서만 존재합니다.

      Windows PowerShell의 범위에 대한 자세한 내용은 about_Scope를 참조하십시오.

        
  Function: 드라이브를 사용하여 함수 찾기 및 관리 Windows PowerShell의 모든 함수와 필터는 자동으로 
      Function: 드라이브에 저장됩니다. 이 드라이브는 Windows PowerShell 함수 공급자에서 제공합니다.

      Function: 드라이브를 참조할 때는 컴퓨터의 C 또는 D 드라이브를 언급할 때처럼Function 뒤에 콜론을 
      입력합니다.

      다음 명령은 Windows PowerShell의 현재 세션에 있는 모든 함수를 표시합니다.

          C:\PS>  dir function:


      함수의 명령은 함수의 정의 속성에 스크립트 블록으로 저장됩니다. 예를 들어 Windows PowerShell과 함께 
      제공되는 Help 함수의 명령을 표시하려면 다음과 같이 입력합니다.

          (dir function:help).definition

      Function: 드라이브에 대한 자세한 내용은 Function을 참조하십시오.


  새 세션에서 함수 다시 사용
      Windows PowerShell 명령 프롬프트에 함수를 입력하면 해당 함수는 현재 세션의 일부가 됩니다. 이 
      함수는 세션이 끝날 때까지 사용할 수 있습니다. 

      모든 Windows PowerShell 세션에서 함수를 사용하려면 해당 함수를 Windows PowerShell 
      프로필에 추가합니다. 프로필에 대한 자세한 내용은 about_Profiles를 참조하십시오.

      Windows PowerShell 스크립트 파일에 함수를 저장할 수도 있습니다. 이렇게 하려면 텍스트 파일에 함수를 
      입력한 다음 .ps1 파일 이름 확장명으로 파일을 저장합니다.


  함수에 대한 도움말 작성
    Get-Help cmdlet은 cmdlet, 공급자 및 스크립트뿐만 아니라 함수에 대한 도움말을 가져옵니다. 함수에 대한 
    도움말을 가져오려면 Get-Help를 입력하고 그 뒤에 함수 이름을 입력합니다.

    예를 들어 MyDisks 함수에 대한 도움말을 가져오려면 다음과 같이 입력합니다.

        get-help MyDisks

    다음 두 메서드 중 하나를 사용하여 함수에 대한 도움말을 작성할 수 있습니다.

    --  함수에 대한 설명 기반 도움말

        설명에 특수 키워드를 사용하여 도움말 항목을 만듭니다. 함수에 대한 설명 기반 도움말을 만들려면 설명을 
        함수 본문 시작 또는 끝에 배치하거나 함수 키워드 앞에 있는 줄에 배치해야 합니다. 설명 기반 도움말에 대한 
        자세한 내용은 about_Comment_Based_Help를 참조하십시오.

    --  함수에 대한 XML 기반 도움말

        Cmdlet에 대해 일반적으로 만들어진 유형과 같은 XML 기반 도움말 항목을 만듭니다. 도움말 항목을 여러 
        언어로 지역화하는 경우 XML 기반 도움말이 필요합니다. 

        함수를 XML기반 도움말 항목과 연결하려면 .ExternalHelp 도움말 설명 키워드를 사용합니다. 
        ExternalHelp 키워드에 대한 자세한 내용은 about_Comment_Based_Help를 
        참조하십시오. XML 기반 도움말에 대한 자세한 내용은 MSDN의 "How to Write Cmdlet 
        Help(Cmdlet 도움말 작성 방법)"를 참조하십시오.



참고 항목 
    about_Automatic_Variables 
    about_Comment_Based_Help
    about_Functions_Advanced 
    about_Functions_CmdletBindingAttribute
    about_Parameters
    about_Profiles
    about_Scopes
    about_Script_Blocks
    Function(공급자)




목차