2017-04-27 34 views
2

两个参数$ installDatabase和$ databasePassword:参数集不是强制性

[Parameter(ParameterSetName='Test', mandatory=$false)][Switch]$installDatabase, 
[Parameter(ParameterSetName='Test')][String]$databasePassword 

我需要这为执行相同的功能,这一点,如果:

if ($installDatabase -and !($databasePassword) -or ($databasePassword -and !($installDatabase))) 
{ 
Write-Verbose "Use -installDatabase and -databasePassword together." 
} 

什么是错的PARAMETERSET?

回答

1

编辑:OK这里是参数设置进行评估

function test 
{ 
    [CmdletBinding(DefaultParameterSetName="Test")] 
    param(
     [Parameter(ParameterSetName='Test', mandatory=$true)] 
     [switch]$installDatabase, 
     [Parameter(ParameterSetName='Test2', mandatory=$true)] 
     [String]$databasePassword 
    ) 
} 

在这个版本的版本任你打电话test -installDatabasetest -databasePassword pwd 或会出现以下异常:

test : Parameter set cannot be resolved using the specified named parameters. 
+0

问题是if语句不在param块中。如果参数没有传递到一起,我需要一个抛出异常的解决方案。参数集可能不会提供。 – Jelphy

+0

好的,这个问题还不清楚,这是一个更新 –

1
function Do-Something{  
    Param(
     [Parameter(ParameterSetName='Test', Mandatory=$true)] 
     [Switch]$installDatabase, 

     [Parameter(ParameterSetName='Test', Mandatory=$true)] 
     [String]$databasePassword 
    ) 
} 

][String]

+0

道歉 - 这是一个错字。功能仍然不起作用。 – Jelphy

+0

我需要ParameterSet来评估与显示的if语句相同的条件。这可能吗?因此,如果两个参数没有结合使用,则会引发异常。 – Jelphy

1

之前缺失(在PS V5测试)

似乎参数当至少两个被定义集只工作 - ,但是,而不是产生一个异常的用户是提示提供缺少的值(因为Mandatory=$True),这可能不是你想要的。

如果Param定义改变为:

Param(
[Parameter(ParameterSetName='Test1', Mandatory=$True)] 
[Switch]$installDatabase, 

[Parameter(ParameterSetName='Test1', Mandatory=$True)] 
[String]$databasePassword, 

[Parameter(ParameterSetName='Test2')] 
[String]$something 
) 

用户被提示输入installDatabasedatabasePassword如果只有它们中的一个被提供,并且如果供给something不提示。

如果提供something和(installDatabasedatabasePassword),则会发生异常。

如果只定义了一个参数集,就好像没有。

编辑

尝试使用的($throw...)默认值的可选参数,如:

[Parameter(ParameterSetName='Test1')] 
[Switch]$installDatabase=$(throw "installDatabase is mandatory if databasePassword is provided"), 

不起作用,因为使用的是默认值与否的参数集适用。