2016-07-14 48 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 ...';) –