수색…


소개

함수는 기본적으로 이름 지정된 코드 블록입니다. 함수 이름을 호출하면 해당 함수 내의 스크립트 블록이 실행됩니다. PowerShell은 사용자가 지정한 이름을 가진 PowerShell 문 목록입니다. 함수를 실행할 때 함수 이름을 입력합니다. 반복적 인 작업을 처리 할 때 시간을 절약하는 방법입니다. PowerShell은 세 부분으로 구성됩니다. 키워드 'Function', Name, 스크립트 블록이 포함 된 페이로드 (curly / 괄호 스타일 괄호로 묶입니다.

매개 변수없는 간단한 기능

이것은 문자열을 반환하는 함수의 예입니다. 이 예에서 함수는 변수에 값을 할당하는 명령문에서 호출됩니다. 이 경우의 값은 함수의 반환 값입니다.

function Get-Greeting{
    "Hello World"
}

# Invoking the function
$greeting = Get-Greeting

# demonstrate output
$greeting
Get-Greeting

function 는 다음 코드를 function 선언합니다.

Get-Greeting 은 함수의 이름입니다. 함수가 스크립트에서 사용될 필요가있을 때마다 함수를 이름으로 호출하여 함수를 호출 할 수 있습니다.

{ ... } 는 함수에 의해 실행되는 스크립트 블록입니다.

위의 코드가 ISE에서 실행되면 결과는 다음과 같습니다.

Hello World
Hello World

기본 매개 변수

param 블록을 사용하여 매개 변수로 함수를 정의 할 수 있습니다.

function Write-Greeting {
    param(
        [Parameter(Mandatory,Position=0)]
        [String]$name,
        [Parameter(Mandatory,Position=1)]
        [Int]$age
    )
    "Hello $name, you are $age years old."
}

또는 간단한 함수 구문을 사용합니다.

function Write-Greeting ($name, $age) {
    "Hello $name, you are $age years old."
}

주 : 두 유형의 매개 변수 정의 모두에서 유형 변환은 필요하지 않습니다.

단순 함수 구문 (SFS)은 param 블록과 비교하여 기능이 매우 제한적입니다.
함수 내에서 노출 될 매개 변수를 정의 할 수 있지만 매개 변수 특성을 지정하거나, 매개 변수 유효성 검사를 활용하거나, SFS와 함께 [CmdletBinding()] 포함 할 수는 없습니다 (전체 목록은 아닙니다).

함수는 정렬 된 매개 변수 또는 명명 된 매개 변수를 사용하여 호출 할 수 있습니다.

호출시 매개 변수의 순서는 함수 헤더의 선언 순서 (기본값)와 일치하거나 위의 고급 함수 예제에서와 같이 Position 매개 변수 속성을 사용하여 지정할 수 있습니다.

$greeting = Write-Greeting "Jim" 82

또는이 함수는 명명 된 매개 변수를 사용하여 호출 할 수 있습니다.

$greeting = Write-Greeting -name "Bob" -age 82

필수 매개 변수

함수에 대한 매개 변수는 필수로 표시 할 수 있습니다.

function Get-Greeting{
    param
    (
        [Parameter(Mandatory=$true)]$name
    )
    "Hello World $name"
}

함수가 값없이 호출되면 명령 행에서 값을 입력하라는 메시지를 표시합니다.

$greeting = Get-Greeting 

cmdlet Get-Greeting at command pipeline position 1
Supply values for the following parameters:
name: 

고급 기능

이것은 Powershell ISE의 ​​고급 기능 스 니펫 사본입니다. 기본적으로 Powershell의 고급 기능과 함께 사용할 수있는 많은 템플릿을위한 템플릿입니다. 주목해야 할 핵심 사항 :

  • get-help 통합 - 함수의 시작 부분에는 get-help cmdlet에서 읽을 수 있도록 설정 한 주석 블록이 들어 있습니다. 기능 블록은 원하는 경우 끝에 위치 할 수 있습니다.
  • cmdletbinding - 함수가 cmdlet처럼 작동합니다.
  • 매개 변수들
  • 매개 변수 집합
<#
.Synopsis
   Short description
.DESCRIPTION
   Long description
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
.INPUTS
   Inputs to this cmdlet (if any)
.OUTPUTS
   Output from this cmdlet (if any)
.NOTES
   General notes
.COMPONENT
   The component this cmdlet belongs to
.ROLE
   The role this cmdlet belongs to
.FUNCTIONALITY
   The functionality that best describes this cmdlet
#>
function Verb-Noun
{
    [CmdletBinding(DefaultParameterSetName='Parameter Set 1', 
                  SupportsShouldProcess=$true, 
                  PositionalBinding=$false,
                  HelpUri = 'http://www.microsoft.com/',
                  ConfirmImpact='Medium')]
    [Alias()]
    [OutputType([String])]
    Param
    (
        # Param1 help description
        [Parameter(Mandatory=$true, 
                   ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true, 
                   ValueFromRemainingArguments=$false, 
                   Position=0,
                   ParameterSetName='Parameter Set 1')]
        [ValidateNotNull()]
        [ValidateNotNullOrEmpty()]
        [ValidateCount(0,5)]
        [ValidateSet("sun", "moon", "earth")]
        [Alias("p1")] 
        $Param1,

        # Param2 help description
        [Parameter(ParameterSetName='Parameter Set 1')]
        [AllowNull()]
        [AllowEmptyCollection()]
        [AllowEmptyString()]
        [ValidateScript({$true})]
        [ValidateRange(0,5)]
        [int]
        $Param2,

        # Param3 help description
        [Parameter(ParameterSetName='Another Parameter Set')]
        [ValidatePattern("[a-z]*")]
        [ValidateLength(0,15)]
        [String]
        $Param3
    )

    Begin
    {
    }
    Process
    {
        if ($pscmdlet.ShouldProcess("Target", "Operation"))
        {
        }
    }
    End
    {
    }
}

매개 변수 유효성 검사

PowerShell에서 매개 변수 항목의 유효성을 검사하는 다양한 방법이 있습니다.

매개 변수 값을 확인하기 위해 함수 나 스크립트 내에 코드를 작성하는 대신 유효하지 않은 값이 전달되면 이러한 ParameterAttributes가 발생합니다.

ValidateSet

때로는 매개 변수가 받아 들일 수있는 가능한 값을 제한해야합니다. 스크립트 나 함수에서 $Color 매개 변수로 빨강, 초록, 파랑 ​​만 허용하려고한다고 가정 해 보겠습니다.

ValidateSet 매개 변수 특성을 사용하여이를 제한 할 수 있습니다. 이 인수를 설정할 때 탭 완료를 허용하는 추가 이점이 있습니다 (일부 환경에서).

param(
    [ValidateSet('red','green','blue',IgnoreCase)]
    [string]$Color
)

IgnoreCase 를 지정하여 대소 문자를 구분하지 않을 수도 있습니다.

ValidateRange

이 매개 변수 유효성 검사 방법은 최소 및 최대 Int32 값을 사용하며 매개 변수가 해당 범위 내에 있어야합니다.

param(
    [ValidateRange(0,120)]
    [Int]$Age
)

ValidatePattern

이 매개 변수 유효성 검사 방법은 지정된 정규식 패턴과 일치하는 매개 변수를 허용합니다.

param(
    [ValidatePattern("\w{4-6}\d{2}")]
    [string]$UserName
)

ValidateLength

이 매개 변수 유효성 검사 방법은 전달 된 문자열의 길이를 테스트합니다.

param(
    [ValidateLength(0,15)]
    [String]$PhoneNumber
)

ValidateCount

이 매개 변수 유효성 검사 방법은 전달 된 인수의 양 (예 : 문자열 배열)을 테스트합니다.

param(
    [ValidateCount(1,5)]
    [String[]]$ComputerName
)

ValidateScript

마지막으로 ValidateScript 메서드는 매우 유연하며 스크립트 블록을 사용하고 전달 된 인수를 나타내는 $ _을 사용하여 평가합니다. 그런 다음 결과가 $ true 인 경우 인수를 전달합니다 (유효한 모든 출력 포함).

이것은 파일이 존재하는지 테스트하는 데 사용할 수 있습니다.

param(
    [ValidateScript({Test-Path $_})]
    [IO.FileInfo]$Path 
)

사용자가 AD에 있는지 확인하려면 다음을 수행하십시오.

param(
    [ValidateScript({Get-ADUser $_})]
    [String]$UserName
)

그리고 거의 모든 것을 작성할 수 있습니다 (oneliners에만 국한되지 않음).

param(
    [ValidateScript({
        $AnHourAgo = (Get-Date).AddHours(-1)
        if ($_ -lt $AnHourAgo.AddMinutes(5) -and $_ -gt $AnHourAgo.AddMinutes(-5)) {
            $true
        } else {
            throw "That's not within five minutes. Try again."
        }
    })]
    [String]$TimeAboutAnHourAgo
)


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow