2010-05-08 62 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

相關問題