Ich habe eine PowerShell-Funktion, die die Registrierungsschlüsselwerte ändert. Code:PowerShell obligatorischer Parameter hängt von anderem Parameter ab
param(
[Parameter()] [switch]$CreateNewChild,
[Parameter(Mandatory=$true)] [string]$PropertyType
)
Es hat einen Parameter „CreateNewChild“ und wenn das Flag gesetzt ist, wird die Funktion der Schlüsseleigenschaft zu erstellen, auch wenn es gefunden Wan't. Der Parameter "PropertyType" muss zwingend sein, aber nur, wenn das Flag "CreateNewChild" gesetzt wurde.
Die Frage ist, wie man einen Parameter obligatorisch macht, aber nur, wenn ein anderer Parameter angegeben wurde?
OK, ich habe damit herumgespielt. 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 jedoch, dass $ KeyPath, $ Name und $ NewValue nicht mehr obligatorisch. Wenn der Parameter "1" auf "obligatorisch" gesetzt wird, wird der Code unterbrochen (Parametersatz kann nicht aufgelöst werden). Diese Parametersätze sind verwirrend. Ich bin sicher, dass es einen Weg gibt, aber ich kann nicht herausfinden, wie es geht
ich das versucht habe, hier ist der Code: 'param ( [Parameter (Position = 0, Mandatory = $ true) ] [string] $ KeyPath, [Parameter (Position = 1, Obligatorisch = $ true)] [string] $ Name, [Parameter (Position = 2, Obligatorisch = $ true)] [string] $ NewValue, [Parameter (ParameterSetName = "Eins")] [Schalter] $ CreateNewChild, [Parameter (ParameterSetName = " One ", Mandatory = $ true)] [Zeichenfolge] $ PropertyType ) ' Dies funktioniert jedoch nicht. Bei dem Versuch, folgendes auszuführen: 'Set-RegistryKeyPropertyValue -KeyPath $ pfad -Name $ name -NeuerWert 0' Er fordert mich auf, den Wert für $ PropertyType anzugeben, da es obligatorisch ist – lime
Entschuldigung, ich hätte genauer sein sollen. Ich habe der obigen Antwort ein besseres Beispiel hinzugefügt. :) –
Ja, genau das habe ich gesucht! Vielen Dank! p.s. Die eine Option, die ich nicht versucht habe, "$ Favourite" obligatorisch zu machen = $ false, ich dachte, dass sie standardmäßig falsch war. Diese Parametersatzlogik ist seltsam ... – lime