2010-05-08 9 views
6

J'ai le bloc param suivant au début d'un scriptComment spécifier un paramètre non-positionnel dans un script PowerShell?

param(
[string]$command, 
[string]$version = "1.1.0" 
) 

Cela est bien, que j'ai besoin $version-pas un paramètre de position, de sorte que si vous tapez

.\script.ps1 run argument 

Alors $args devrait contenir "argument" et $version devrait être "1.1.0". Je sais que je peux le faire avec une Cmdlet C#, mais il serait plus pratique si je pouvais livrer ceci en un seul script.

Répondre

6

Dans PowerShell 1.0, impossible AFAIK. Vous devez supprimer le paramètre $ version si vous ne voulez pas qu'il soit positionnel.

Dans PowerShell 2.0, vous pouvez obtenir ce que vous voulez en créant une fonction avancée dans laquelle vous spécifiez des informations supplémentaires dans un attribut de paramètres, par exemple:

function foo {  
    param(
     [Parameter(Mandatory=$true, Position = 0)] 
     [string] 
     $command, 

     [Parameter()] 
     [string] 
     $version = "1.1.0", 

     [Parameter(ValueFromRemainingArguments = $true)] 
     $remainingArgs 
    ) 

    Process { 
     $OFS = ',' 
     "command is $command" 
     "version is $version" 
     "remainingArgs are $remainingArgs" 
    } 
} 

foo run argument 
+0

Si vous supprimez la « Position = 0 » du premier param , tous les paramètres rémanents semblent revenir aux paramètres de position. Une idée de comment créer un ensemble de paramètres pour lesquels tous sont paramétriques? – Fopedush

+0

Si vous ne définissez pas 'Mandatory = $ true' (ou si vous supprimez tout simplement' [Parameter()] '), un paramètre est considéré comme optionnel. –

+0

Je ne suis pas capable de créer une liste de paramètres sans paramètres de position, j'en ai peur. Je vais ouvrir une question détaillée à ce sujet dans un instant. – Fopedush

Questions connexes