Powershell non-positionnel, paramètres facultatifs
Je suis en train de créer une powershell (2.0) le script qui va accepter les arguments qui suivent ce modèle de base:
.\{script name} [options] PATH
Où sont les options de n'importe quel nombre de paramètres optionnels - penser le long des lignes de '-v pour verbose. L'argument de CHEMIN aurez simplement à être ce que argument est passé en dernier, et est obligatoire. On pourrait l'appeler le script avec pas d'options et un seul argument, et que l'argument serait supposé être le Chemin d'accès. Je vais avoir de la difficulté à mettre en place une liste des paramètres qui ne contient que les paramètres facultatifs mais il est aussi non-positionnelle.
Ce rapide script illustre le problème que j'ai:
#param test script
Param(
$firstArg,
$secondArg,
[switch]$thirdArg,
[Parameter(ValueFromRemainingArguments = $true)]
$remainingArgs)
write-host "first arg is $firstArg"
write-host "second arg is $secondArg"
write-host "third arg is $thirdArg"
write-host "remaining: $remainingArgs"
Lorsqu'il est appelé de la sorte:
.\param-test.ps1 firstValue secondValue
Le script sorties:
first arg is firstValue
second arg is secondValue
third arg is False
remaining:
Le comportement je suis essayer pour créer aurait à la fois les arguments de tomber dans l'option paramètres et finissent dans le remainingArgs variable.
Cette question/réponse obligeamment fourni un moyen d'obtenir le comportement souhaité, mais il ne semble que s'il y a au moins un paramètre obligatoire, et seulement si, il s'agit avant tous les autres arguments.
Je peux illustrer ce comportement en faisant firstArg obligatoire et en spécifiant une position de 0:
#param test script
Param(
[Parameter(Mandatory=$true, Position = 0)]
$firstArg,
$secondArg,
[switch]$thirdArg,
[Parameter(ValueFromRemainingArguments = $true)]
$remainingArgs)
write-host "first arg is $firstArg"
write-host "second arg is $secondArg"
write-host "third arg is $thirdArg"
write-host "remaining: $remainingArgs"
Exécuter avec la même entrée comme avant:
.\param-test.ps1 firstValue secondValue
La sortie est comme suit:
first arg is firstValue
second arg is
third arg is False
remaining: secondValue
La première, obligatoire argument est assigné, et tout à gauche tombe tout le chemin à travers.
La question est la suivante: Comment puis-je configurer un params liste, de sorte que tous des paramètres sont optionnels, et aucun d'entre eux est positionnel?
source d'informationauteur Fopedush
Vous devez vous connecter pour publier un commentaire.
Comment à ce sujet?
One
etTwo
sont facultatifs et ne peut être spécifié par un nom.Three
est obligatoire et peut être fourni sans nom.Ces travaux:
On va à l'échec:
Ce n'est pas appliquer que votre obligatoire arg est placé en dernier, ou qu'il n'est pas nommé. Mais il permet pour le modèle d'utilisation de base que vous voulez.
Il ne permet pas non plus d'une valeur dans
$Three
. Cela pourrait être ce que vous voulez. Mais, si vous voulez traiter de multiples non-paramètres nommés comme faisant partie de$Three
puis ajouter leValueFromRemainingArguments
attribut.Maintenant des choses comme ce travail:
Ou même