2017-04-27 20 views
2

の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

編集:

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

問題はif文がparamブロックの外にあることです。私はパラメータが一緒に渡されない場合、例外がスローされるソリューションが必要です。パラメータセットはこれを提供しないかもしれない。 – Jelphy

+0

OK、質問からは分かりませんでしたが、ここに更新があります –

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

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

][String]

+0

謝罪 - だった:OK、ここでパラメータセットは、このバージョンあなたがtest -installDatabasetest -databasePassword pwd を呼び出したり、次の例外が発生するのいずれかで

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

を評価されているバージョンがありますタイプミス。機能はまだ動作しません。 – Jelphy

+0

表示されたif文と同じ条件を評価するにはParameterSetが必要です。これは可能ですか?したがって、2つのパラメータを併用しないと例外がスローされます。 – Jelphy

1

前に行方不明になった(PS v5の上でテスト)

少なくとも2が定義されている場合、パラメータセットはのみ動作ことが表示されます - しかし、ではなく、ユーザがある例外を発生させます(Mandatory=$Trueのために)欠けている値を提供するように促しましたが、これはあなたが望むものではないかもしれません。

Paramの定義は次のように変更された場合は、次のいずれか一方だけが供給され、somethingが供給されている場合はプロンプトが表示されていない場合は、ユーザーがinstallDatabasedatabasePasswordの入力を求められ

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

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

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

somethingと(installDatabaseまたはdatabasePassword)が指定されている場合は例外が発生します。

パラメータセットが1つだけ定義されている場合は、まったく同じではありません。

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

デフォルト値が使用されているため、動作しないかどうかのパラメータセット:のように、オプションのパラメータのために($throw...)のデフォルト値を使用しようと

EDIT

適用される。

関連する問題