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