PowerShell obligatorische parameter hängt von einem anderen parameter
Habe ich ein PowerShell-Funktion, die änderungen der registry key-Werte. Code:
param(
[Parameter()] [switch]$CreateNewChild,
[Parameter(Mandatory=$true)] [string]$PropertyType
)
Es wurde ein parameter "CreateNewChild", und wenn das flag gesetzt ist, wird die Funktion erstellen Sie die key-Eigenschaft, selbst wenn es nicht gefunden. Der parameter "Art der Unterkunft" muss zwingend sein, aber nur, wenn "CreateNewChild" - flag gesetzt wurde.
Die Frage ist, wie mache ich ein parameter zwingend, aber nur, wenn ein anderer parameter angegeben wurde?
OK, ich habe das Spiel mit ihm. Und das funktioniert:
param(
[Parameter(ParameterSetName="one")]
[switch]$DoNotCreateNewChild,
[string]$KeyPath,
[string]$Name,
[string]$NewValue,
[Parameter(ParameterSetName="two")]
[switch]$CreateNewChild,
[Parameter(ParameterSetName="two",Mandatory=$true)]
[string]$PropertyType
)
Dies bedeutet aber, dass $Schlüsselpfad, $Name und $NewValue sind keine Pflicht mehr. Einstellung "ein" parameter obligatorisch bricht der code ("Parametersatz kann nicht aufgelöst werden" Fehler). Diese Parametersätze sind verwirrend. Ich bin mir sicher, dass es einen Weg gibt, aber ich kann nicht herausfinden, wie es zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie diesen Parameter definieren Sie einen parameter einstellen, um dies zu erreichen.
Referenz:
http://blogs.msdn.com/b/powershell/archive/2008/12/23/powershell-v2-parametersets.aspx
http://blogs.technet.com/b/heyscriptingguy/archive/2011/06/30/use-parameter-sets-to-simplify-powershell-commands.aspx
- - - - Update ---
Hier ist ein snippet, dass ahmt die Funktionalität, die Sie suchen. Die "Extra" - parameter festgelegt wird, werden nicht verarbeitet, es sei denn die -Lieblings-switch genannt wird.
param( [Parameter(Position=0,Mandatory=$true)] [string]$KeyPath, [Parameter(Position=1,Mandatory=$true)] [string]$Name, [Parameter(Position=2,Mandatory=$true)] [string]$NewValue, [Parameter(ParameterSetName="One")][switch]$CreateNewChild, [Parameter(ParameterSetName="One",Mandatory=$true)] [string]$PropertyType )
Aber das funktioniert nicht. Beim ausführen der folgenden:Set-RegistryKeyPropertyValue -KeyPath $path -Name $name -NewValue 0
Es mich auffordert, geben Sie den Wert für $Art der Unterkunft, als es notwendig-Favorite:$false
? WirdFavoriteCar
immer noch obligatorisch? (Ich erwarte es sollte nicht obligatorisch sein in diesem Fall.)PropertyType
und nicht vorbeiCreateNewChild
Können Sie auch eine dynamische parameter:
Neue Art und Weise zu erstellen, die eine dynamische parameter