2012-09-14 1 views
16

나는 두 가지 방법으로 호출 할 수있는 스크립트가 있습니다.Powershell에서 스크립트의 param 속성을 제공하는 방법은 무엇입니까?</p> <pre><code>MyScript -foo pathtofolder </code></pre> <p>또는 <pre><code>MyScript -bar pathtofolder </code></pre> <p></p>가 (즉, 내가 스위치 플러스 폴더 나 문자열 인수 플러스 폴더를 통과 할 수 있습니다 :

param(
    [parameter(Mandatory=$false)] [switch]$foo, 
    [parameter(Mandatory=$false)] [String]$bar, 
    [parameter(Mandatory=$true)] [System.IO.FileInfo]$path 
) 
:)

그 구문을 반영하기 위해 나의 스크립트에 parameter declarations를 넣어 시도

하지만 내가 명시 적으로 path을 통과해야 스크립트를 호출 할 :

MyScript -l -path path\to\folder 

그래서 내가 할 수있는 (방법)이 모두 barpath 위치 매개 변수를 만드는?

참고 : 스크립트를 호출하기 위해 매우 바보 같은 구문을 선택했다면 변경할 수 있습니다.

답변

26

몇 가지 : 당신은 매개 변수가 스크립트를 호출하는 상호 배타적 인 방법이 있다는 것을 PowerShell을 알려 설정 사용할 필요가; 즉, 스위치와 문자열을 동시에 사용할 수 없습니다. 세트는 또한 $bar$filepath의 위치를 ​​인덱스 0에 둘 수 있도록 해줍니다. 스위치는 바인더에 모호하지 않고 어느 위치 에나 배치 될 수 있으므로 위치를 지정할 필요가 없습니다. 또한 각 집합에서 적어도 하나의 매개 변수는 필수 매개 변수 여야합니다.

function test-set { 
    [CmdletBinding(DefaultParameterSetName = "BarSet")] 
    param(
     [parameter(
      mandatory=$true, 
      parametersetname="FooSet" 
     )] 
     [switch]$Foo, 

     [parameter(
      mandatory=$true, 
      position=0, 
      parametersetname="BarSet" 
     )] 
     [string]$Bar, 

     [parameter(
      mandatory=$true, 
      position=1 
     )] 
     [io.fileinfo]$FilePath 
    ) 
@" 
    Parameterset is: {0} 
    Bar is: '{1}' 
    -Foo present: {2} 
    FilePath: {3} 
"@ -f $PSCmdlet.ParameterSetName, $bar, $foo.IsPresent, $FilePath 
} 

CmdletBinding 속성은 함수가 매개 변수없이 를 불려 갔을 경우 기본 있어야하는 매개 변수 세트를 지정하는 데 필요합니다.

다음은 위의 구성에 대한 구문 도움말입니다 :

PS> test-set -? 

NAME 
    test-set 

SYNTAX 
    test-set [-Bar] <string> [-FilePath] <FileInfo> [<CommonParameters>] 

    test-set [-FilePath] <FileInfo> -Foo [<CommonParameters>] 

그리고 여기에 다양한 호출의 출력입니다 :

PS> test-set barval C:\temp\foo.zip 
    Parameterset is: BarSet 
    Bar is: 'barval' 
    -Foo present: False 
    FilePath: C:\temp\foo.zip 

PS> test-set -foo c:\temp\foo.zip 
    Parameterset is: FooSet 
    Bar is: '' 
    -Foo present: True 
    FilePath: c:\temp\foo.zip 

희망이 도움이됩니다.

+0

좋아, 이렇게 해냈어. 이제는 모두 아름답게 작동 해. 고마워요! – sbi

0

설명대로 here 매개 변수의 매개 변수 위치를 지정할 수 있습니다.

[parameter(Position=0)] 
+1

그러나 두 번째 호출 구문은 허용되지 않습니다. –