2016-07-14 41 views
0

我想使用參數集並使用默認參數集。但默認參數集似乎並不適合我。任何幫助深表感謝。我可以很容易地使用默認行爲的驗證集,但我想知道我在這裏做錯了什麼。Powershell默認參數集不起作用。錯誤

Param([cmdletbinding(DefaultParametersetname="Directory")] 
     [Parameter(Mandatory=$false,ParameterSetName="File")] 
     [switch]$file, 
     [Parameter(Mandatory=$false,ParameterSetName="Directory")] 
     [switch]$directory, 

[Parameter(Mandatory=$false,ParameterSetName="File")] 
[Parameter(Mandatory=$false,ParameterSetName="Directory")] 
[string]$Source, 
[Parameter(Mandatory=$true,ParameterSetName="File")] 
[Parameter(Mandatory=$true,ParameterSetName="Directory")] 
[string]$DestinationPath, 
[Parameter(Mandatory=$false,ParameterSetName="Directory")] 
[Parameter(Mandatory=$false,ParameterSetName="File")] 
[array]$Servers 

PS C:\> Test-Script -Source "c:\somedirectory" -DestinationPath "c:\someotherdirectory" 

error as shown below in the image

測試腳本:參數集不能使用指定的命名參數來解決。
在行:1字符:1
+測試腳本 - 源 「C:\ somedirectory」 -DestinationPath 「C:\ someotherdirectory」
+ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~
+ CategoryInfo:InvalidArgument:(:) [測試腳本],ParameterBindingException
+ FullyQualifiedErrorId:AmbiguousParameterSet,測試腳本

回答

2

CmdletBinding() attribute需要去param塊之外,緊接在param關鍵字之前,否則就會被忽略:

[CmdletBinding(DefaultParametersetname="Directory")] 
Param(
    [Parameter(Mandatory=$false,ParameterSetName="File")] 
    [switch]$file, 

    [Parameter(Mandatory=$false,ParameterSetName="Directory")] 
    [switch]$directory, 

    [Parameter(Mandatory=$false,ParameterSetName="File")] 
    [Parameter(Mandatory=$false,ParameterSetName="Directory")] 
    [string]$Source, 

    [Parameter(Mandatory=$true,ParameterSetName="File")] 
    [Parameter(Mandatory=$true,ParameterSetName="Directory")] 
    [string]$DestinationPath, 

    [Parameter(Mandatory=$false,ParameterSetName="Directory")] 
    [Parameter(Mandatory=$false,ParameterSetName="File")] 
    [array]$Servers 
) 
+0

感謝Mathias !!似乎已經解決了這個問題。 – tarunmunjal

+0

好搭檔!在我看來,我已經解析了各種設置哈哈 – briantist

+0

@briantist當我看到'param([cmdl ...';) –