PowerShell paramètre obligatoire dépendent d'autres paramètres
J'ai une PowerShell fonction qui modifie les valeurs de clé de registre. Code:
param(
[Parameter()] [switch]$CreateNewChild,
[Parameter(Mandatory=$true)] [string]$PropertyType
)
Il a un paramètre "CreateNewChild" et si le drapeau est réglé, la fonction va créer la clé de la propriété, même si elle wan pas trouvé. Le paramètre "PropertyType" doit être obligatoire, mais seulement si "CreateNewChild" indicateur a été défini.
La question est de savoir comment faire un paramètre obligatoire, mais seulement si un autre paramètre a été spécifié?
OK, j'ai été jouer avec elle. Et cela fonctionne:
param
([Parameter(ParameterSetName="one")]
[switch]$DoNotCreateNewChild, [string]$KeyPath, [string]$Name, [string]$NewValue, [Parameter(ParameterSetName="two")]
[switch]$CreateNewChild, [Parameter(ParameterSetName="two",Mandatory=$true)]
[string]$PropertyType
)
Cependant, cela signifie que $chemin d'accès clé, $Nom et $NewValue ne sont pas obligatoires plus. Paramètre "un paramètre obligatoire rompt le code (jeu de paramètres ne peut pas être résolu d'erreur). Ces jeux de paramètres sont à confusion. Je suis sûr qu'il y est un moyen, mais je ne peux pas comprendre comment le faire
OriginalL'auteur lime | 2012-11-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez regrouper l'ensemble de ces paramètres en définissant un ensemble de paramètres pour cela.
Référence:
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
--- Mise à jour ---
Voici un extrait de code qui reproduit la fonctionnalité que vous recherchez. Le "plus" du jeu de paramètres ne sera traitée que si le Favori commutateur est appelé.
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 )
Toutefois, cela ne fonctionne pas. Lorsque vous tentez d'exécuter les opérations suivantes:Set-RegistryKeyPropertyValue -KeyPath $path -Name $name -NewValue 0
On me demande de me fournir la valeur de $PropertyType, comme c'est obligatoireDésolé, j'aurais dû être plus précis. J'ai ajouté un meilleur exemple pour la réponse ci-dessus. 🙂
Oui, c'est exactement ce que je cherchais! Merci!!!! p.s. La seule option que je n'ai pas essayé de faire "$Favori" mandatory=$false, j'ai pensé que c'était faux par défaut. Ce paramètre définit la logique est un peu bizarre...
Vous êtes les bienvenus. Les paramètres de la dynamique, comme walid2mi l'indique, sont une autre option. Je vous suggère de lire cet article pour comprendre plus: msdn.microsoft.com/en-us/library/windows/desktop/...
Ce qui va se passer si passer
-Favorite:$false
? VaFavoriteCar
encore être obligatoire? (J'attends qu'il ne devrait pas être obligatoire dans ce cas.)OriginalL'auteur
vous pouvez également utiliser le paramètre dynamique:
nouvelle façon de créer des dynamiques de paramètre
C'est une bonne réponse de meilleurs liens sont disponibles (powershellmagazine.com/2014/05/29/...)
msdn.microsoft.com/powershell/reference/5.1/...
OriginalL'auteur