2017-04-27 47 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"), 

不起作用,因爲使用的是默認值與否的參數集適用。