about_Functions

업데이트 날짜: 2014년 5월

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

항목

about_Functions

간단한 설명

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

자세한 설명

함수는 할당한 이름을 가진 Windows PowerShell 문의 목록입니다. 함수를 실행하는 경우 함수 이름을 입력합니다. 명령 프롬프트에 목록에 있는 문을 입력하면 실행됩니다.

함수는 다음과 같이 간단할 수 있습니다.

        function Get-PowerShellProcess {Get-Process PowerShell}

또는 cmdlet 또는 응용 프로그램처럼 복잡할 수 있습니다.

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

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

함수의 문 목록은 시작, 처리 및 종료를 사용하여 여러 형식의 문 목록을 포함할 수 있습니다. 이러한 문 목록은 파이프라인에서 입력을 다르게 처리합니다.

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

또한 함수는 cmdlet처럼 작동할 수 있습니다. C# 프로그램을 사용하지 않고 cmdlet처럼 작동하는 함수를 만들 수 있습니다. 자세한 내용은 about_Functions_Advanced(https://go.microsoft.com/fwlink/?LinkID=144511)를 참조하세요.

구문

다음은 함수에 대한 구문입니다.

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

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

함수는 다음과 같은 항목을 포함합니다.

          - A Function keyword
          - A scope (optional)
          - A name that you select
          - Any number of named parameters (optional)
          - One or more Windows PowerShell commands enclosed in braces ({})

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

간단한 함수

유용한 함수는 복잡할 필요가 없습니다. 가장 간단한 함수는 다음과 같은 형식을 가집니다.

          function <function-name> {statements}

예를 들어 다음 함수는 관리자 권한으로 실행 옵션을 사용하여 Windows PowerShell을(를) 시작합니다.

          function Start-PSAdmin {Start-Process PowerShell -Verb RunAs}

함수를 사용하려면 다음을 입력합니다. Start-PSAdmin

함수에 문을 추가하려면 세미콜론(;)을 입력하여 문을 분리하거나 각 문을 별도의 줄에 입력합니다.

예를 들어 다음 함수는 시작일 이후 변경된 현재 사용자의 디렉터리에서 .jpg 파일을 모두 찾아냅니다.

          function Get-NewPix
          {
              $start = Get-Date -Month 1 -Day 1 -Year 2010
              $allpix = Get-ChildItem -Path $env:UserProfile\*.jpg -Recurse
              $allpix | where {$_.LastWriteTime -gt $Start}
          }    

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

함수 이름

함수에 이름을 할당할 수 있지만 타인과 공유한 함수는 모든 Windows PowerShell 명령에 설정되어 있는 명명 규칙을 따라야만 합니다.

함수 이름은 동사-명사 짝으로 이루어져야 합니다. 여기서 동사는 함수가 수행할 동작을 식별하고 명사는 cmdlet이 동작을 수행하는 항목을 식별합니다.

함수는 모든 Windows PowerShell 명령에 대해 승인된 표준 동사를 사용해야 합니다. 이러한 동사를 사용하여 명령 이름을 간단하고 지속성 있으며 사용자가 이해하기 쉽게 유지할 수 있습니다.

표준 Windows PowerShell 동사에 대해 자세한 내용은 https://go.microsoft.com/fwlink/?LinkID=160773에서 MSDN의 "Cmdlet 동사"를 참조하세요.

매개 변수가 있는 함수

명명 매개 변수, 위치 매개 변수, 스위치 매개 변수 및 동적 매개 변수를 비롯하여 함수가 있는 매개 변수를 사용할 수 있습니다. 함수에서 동적 매개 변수에 대한 자세한 내용은 about_Functions_Advanced_Parameters를 참조하세요.(https://go.microsoft.com/fwlink/?LinkID=135173)

명명 매개 변수

아무리 많은 명명 매개 변수도 정의할 수 있습니다. 이 항목의 뒷부분에 설명한 대로 명명 매개 변수에 대한 기본 값을 포함할 수 있습니다.

다음 샘플 구문에서 보여준 대로 매개 변수 키워드를 사용하여 중괄호 내에서 매개 변수를 정의할 수 있습니다.

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

또한 다음 샘플 구문에서 보여준 대로 매개 변수 키워드를 사용하지 않고 중괄호 밖에서 매개 변수를 정의할 수 있습니다.

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

이러한 두 가지 방법 간에는 차이가 없습니다. 선호하는 방법을 사용합니다.

함수를 실행할 때 매개 변수에 제공한 값은 매개 변수 이름을 포함하는 변수에 할당됩니다. 해당 변수의 값은 함수에서 사용될 수 있습니다.

다음 예는 Get-SmallFiles라는 함수입니다. 이 함수에는 $size 매개 변수가 있습니다. 이 함수는 $size 매개 변수의 값 보다 작은 파일을 모두 표시하지만 디렉터리는 제외합니다.

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

함수에서 $size 변수를 사용할 수 있으며 이는 매개 변수에 대해 정의된 이름입니다.

이 함수를 사용하려면 다음 명령을 입력합니다.

          C:\PS> function Get-SmallFiles –Size 50

또한 매개 변수 이름 없이 명명 매개 변수에 값을 입력합니다. 예를 들어 다음 명령은 크기 매개 변수의 이름을 지정하는 명령과 동일한 결과를 가져옵니다.

          C:\PS> function Get-SmallFiles 50

매개 변수에 기본값을 정의하려면 다음에 있는 Get-SmallFiles 예제의 변형에서 보여준 대로 매개 변수 이름 뒤에 등호 및 값을 입력합니다.

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

"Get-SmallFiles"을 값 없이 입력하면 함수는 $size에 100을 할당합니다. 값을 제공하면 함수는 해당 값을 사용합니다.

필요에 따라 매개 변수의 설명에 PSDefaultValue 특성을 추가하고 PSDefaultValue의 도움말 속성을 지정하여 매개 변수의 기본값을 설명하는 짧은 도움말 문자열을 제공할 수 있습니다. Get-SmallFiles 함수에서 크기 매개 변수의 기본값(100)을 설명하는 도움말 문자열을 제공하려면 다음 예에서 보여준 대로 PSDefaultValue 특성을 추가합니다.

          function Get-SmallFiles {
              param (
              [PSDefaultValue(Help = '100')]
              $size = 100
              )

PSDefaultValue 특성 클래스에 대한 자세한 내용은 MSDN에서 PSDefaultValue 특성 멤버를 참조하세요. (https://msdn.microsoft.com/library/windows/desktop/system.management.automation.psdefaultvalueattribute\_members(v=vs.85).aspx

위치 매개 변수

위치 매개 변수는 매개 변수 이름이 없는 매개 변수입니다. Windows PowerShell는 매개 변수 값 각각을 함수의 매개 변수와 연결하기 위해 매개 변수 값을 사용합니다.

위치 매개 변수를 사용하는 경우 함수 이름 뒤에 하나 이상의 값을 입력합니다. 위치 매개 변수 값은 $args 열 변수에 할당됩니다. 함수 이름 뒤에 있는 값은 $args 열의 맨 앞, $args[0]에 할당됩니다.

다음 Get-Extension 함수는 제공한 파일 이름에 .txt 파일 이름 확장을 추가합니다.

          function Get-Extension {
              $name = $args[0] + ".txt"
              $name
          }
          C:\PS> Get-Extension myTextFile
          myTextFile.txt

스위치 매개 변수

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

스위치 매개 변수를 정의하려면 다음 예에서 보여준 대로 매개 변수 이름 앞에 [스위치] 형식을 지정합니다.

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

함수 이름 뒤에 켜기 스위치 매개 변수를 입력하는 경우 함수는 "스위치 켜짐"을 표시합니다. 스위치 매개 변수가 없으면 "스위치 꺼짐"을 표시합니다.

          C:\PS> Switch-Item -on
          Switch on

          C:\PS> Switch-Item
          Switch off

또한 함수를 실행할 때 다음 예에서 보여준 대로 스위치에 Boolean 값을 할당할 수 있습니다.

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

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

스플래팅을 사용하여 명령 매개 변수 나타내기

스플랫(splat)을 사용하여 명령의 매개 변수를 나타낼 수 있습니다. 이 기능은 Windows PowerShell 3.0에서 도입되었습니다.

세션에서 명령을 호출하는 함수에서 이 기술을 사용합니다. 명령 매개 변수를 변경할 경우 명령 매개 변수를 선언하거나 열거하거나 함수를 변경할 필요는 없습니다.

다음 샘플 함수는 Get-Command cmdlet을 호출합니다. 명령이 @Args를 사용하여 Get-Command의 매개 변수를 나타냅니다.

          function Get-MyCommand { Get-Command @Args }

Get-MyCommand 함수를 호출할 경우 Get-Command의 모든 매개 변수를 사용할 수 있습니다. 매개 변수 및 매개 변수 값은 @Args를 사용하여 명령으로 전달됩니다.

         PS C:\>Get-MyCommand -Name Get-ChildItem
         CommandType     Name                ModuleName
         -----------     ----                ----------
         Cmdlet          Get-ChildItem       Microsoft.PowerShell.Management

@Args 함수는 $Args 자동 매개 변수를 사용하며 이는 남아있는 인수에서 선언되지 않은 cmdlet 매개 변수 및 값을 나타냅니다.

스플래팅에 대한 자세한 내용은 about_Splatting을 참조하세요.(https://go.microsoft.com/fwlink/?LinkId=262720)

함수에 개체 파이프

모든 함수는 파이프라인에서 입력을 가져올 수 있습니다. 시작, 처리 및 종료 키워드를 사용해서 함수가 파이프라인에서 입력을 처리하는 방법을 제어할 수 있습니다. 다음 샘플 구문은 세 가지 키워드를 보여줍니다.

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

시작 문 목록은 함수의 시작점에서 한 번만 실행됩니다.

처리 문 목록은 파이프라인에 있는 각 개체 마다 한 번씩 실행됩니다. 처리 블록이 실행 중인 동안 파이프라인 개체는 각각 한 번에 한 개씩 $_ automatic 변수에 할당됩니다.

함수가 파이프라인에서 모든 개체를 수신한 후에 종료 문 목록이 한 번 실행됩니다. 시작, 처리 또는 종료 키워드를 하나도 사용하지 않으면 모든 문은 종료 문 목록처럼 다루어집니다.

다음 함수는 처리 키워드를 사용합니다. 함수는 파이프라인에서 예를 표시합니다.

          function Get-Pipeline 
          { 
              process {"The value is: $_"} 
          }

이 함수를 보여주려면 다음 예에서 보여준 대로 쉼표로 구분된 숫자 목록을 입력합니다.

          C:\PS> 1,2,4 | Get-Pipeline
          The value is: 1
          The value is: 2
          The value is: 4

파이프라인에서 함수를 사용할 경우 함수에 파이프된 개체는 $input 자동 변수에 할당됩니다. 개체가 파이프라인에서 들어오기 전에 함수는 시작 키워드가 있는 문을 실행합니다. 모든 개체를 파이프라인에서 수신한 후에 함수가 종료 키워드가 있는 문을 실행합니다.

다음 예는 시작 및 종료 키워드가 있는 $input 자동 변수를 보여줍니다.

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

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

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

시작 문이 실행될 때 함수는 파이프라인에서 입력되지 않습니다. 종료 문은 함수에 값이 주어진 다음 실행됩니다.

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

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

이 예제에서 함수에 파이프된 각 개체는 진행 문 목록으로 보내집니다. 진행 문은 각 개체에서 한 번에 한 개체 씩 실행됩니다. 함수가 종료 키워드에 도달하면 $input 자동 변수는 비게 됩니다.

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

필터

필터는 파이프라인에서 각 개체에 실행되는 함수의 형식입니다. 필터는 진행 블록에서 모든 문을 포함하는 함수와 유사합니다.

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

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

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

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

함수 범위

함수는 만들어진 범위 안에 존재합니다.

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

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

          function global:Get-DependentSvs { Get-Service |
             where {$_.DependentServices} }

전역 범위에 있는 함수의 경우 스크립트, 함수 및 명령줄에서 해당 함수를 사용할 수 있습니다.

함수는 일반적으로 범위를 만듭니다. 변수와 같이 함수에서 만들어진 항목은 함수 범위 내에서만 존재합니다.

Windows PowerShell의 범위에 대한 자세한 내용은 about_Scopes (https://go.microsoft.com/fwlink/?LinkID=113260)를 참조하세요.

함수를 사용하여 함수 찾기 및 관리 드라이브의 조직

Windows PowerShell의 모든 함수 및 필터는 자동적으로 함수에 저장됩니다. 설정입니다. 이 드라이브는 Windows PowerShell 함수 공급자에서 노출됩니다.

함수를 지칭할 때 컴퓨터의 C 또는 D 드라이브를 지칭할 때와 같이 함수 뒤에 콜론을 입력합니다.

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

          Get-ChildItem function:

함수의 명령은 함수의 정의 속성에서 스크립트 블록으로 저장됩니다. 예를 들어 Windows PowerShell와 함께 가져온 도움말 함수의 명령을 표시하려면 다음을 입력합니다.

          (Get-ChildItem function:help).Definition

함수에 대한 자세한 내용은 함수 공급자에 대한 도움말 항목을 참조하세요. "Get-Help 함수"를 입력하거나 TechNet 라이브러리https://go.microsoft.com/fwlink/?LinkID=113436)에서 확인합니다.

새 세션에서 함수 다시 사용

Windows PowerShell 명령 프롬프트에서 함수를 입력할 때 함수는 현재 세션의 일부가 됩니다. 세션이 끝날 때까지 사용 가능합니다.

함수를 Windows PowerShell 세션 전체에서 사용하려면 Windows PowerShell 프로필에 추가합니다. 프로필에 대한 자세한 내용은 about_Profiles(https://go.microsoft.com/fwlink/?LinkID=113729)을 참조하세요.

또한 Windows PowerShell 스크립트 파일에 함수를 저장할 수 있습니다. 텍스트 파일에서 함수를 입력한 다음 .ps1 파일 이름 확장이 있는 파일에 저장합니다.

함수에 대한 쓰기 도움말말

Get-Help cmdlet는 함수 뿐만 아니라 cmdlet, 공급자 및 스크립트에 대한 도움말을 가져옵니다. 함수에 대한 도움말을 보려면 함수 이름 다음에 Get-Help를 입력합니다.

예를 들어 Get-MyDisks 함수에 대한 도움말을 보려면 다음을 입력합니다.

        Get-Help Get-MyDisks

다음 두 방법의 하나를 사용하여 함수에 대한 도움말을 작성할 수 있습니다.

함수에 대한 주석 기반 도움말

주석에서 특수 키워드를 사용하여 도움말 항목을 만듭니다. 함수에 대한 주석 기반 도움말을 만들려면 주석은 함수 본문의 시작 또는 끝 혹은 함수 키워드의 앞 줄에 두어야 합니다. 주석 기반 도움말에 대한 자세한 내용은 about_Comment_Based_Help를 참조하세요.

함수에 대한 XML 기반 도움말

일반적으로 cmdlet에 대한 형식을 만드는 것처럼 XML 기반 도움말 항목을 만듭니다. 도움말 항목을 여러 언어로 로컬화할 경우 XML 기반 도움말이 필요합니다.

함수를 XML 기반 도움말 항목과 연결하려면 .ExternalHelp 주석 기반 도움말 키워드를 사용합니다. 이 키워드 없이 Get-Help는 함수 도움말 항목을 찾을 수 없고 함수에 대한 Get-Help 호출은 자동 생성된 도움말만을 반환합니다.

ExternalHelp 키워드에 대한 자세한 내용은 about_Comment_Based_Help를 참조하세요. XML 기반 도움말에 대한 자세한 내용은 MSDN에서 "Cmdlet 도움말을 작성하는 방법"을 참조하세요.

참고 항목

about_Automatic_Variables

about_Comment_Based_Help

about_Functions_Advanced

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_CmdletBindingAttribute

about_Functions_OutputTypeAttribute

about_Parameters

about_Profiles

about_Scopes

about_Script_Blocks

함수(공급자)