2010-05-08 55 views
6

我有以下param块在脚本如何在PowerShell脚本中指定非位置参数?

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

这是好的开始,我只需要$version是一个位置参数,因此,如果您键入

.\script.ps1 run argument 

然后$args应该包含“参数”,而$version应该是“1.1.0”。我知道我可以用C#Cmdlet来完成它,但如果我可以将它作为单个脚本来交付,它会更方便。

回答

6

在PowerShell 1.0中,不可能AFAIK。如果你不希望它是位置的,你需要删除$ version参数。

在PowerShell 2.0中,你可以得到你想要的东西通过创建您在其中一个参数属性,如指定其他信息的高级功能:

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

如果除去从第一个参数“位置= 0”所有的重新演绎似乎都回归到了位置参数。任何想法如何可以创建一组参数,其中_all_是可选的? – Fopedush 2012-09-11 15:02:51

+0

如果你没有设置'Mandatory = $ true'(或者完全删除'[Parameter()]'),那么一个参数被认为是可选的。 – 2012-09-11 15:18:18

+0

我似乎无法创建一个没有位置参数的参数列表,恐怕。我会立刻就此提出一个详细的问题。 – Fopedush 2012-09-11 18:16:10

相关问题