2010-05-08 18 views
6

Bir senaryoPowerShell komut dosyasında konumsal olmayan bir parametre nasıl belirlenir?

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

Bu gayet başlangıcında aşağıdaki param blok var, keşke $version-, bir konumsal parametre olmasına gerek yoktur böylece eğer

.\script.ps1 run argument 
yazarsanız

O zaman $args "argüman" ı içermeli ve $version "1.1.0" olmalıdır. Bunu bir C# Cmdlet ile yapabileceğimi biliyorum, ancak bunu tek bir komut dosyası olarak sunabilirsem daha kullanışlı olurdu.

cevap

6

PowerShell 1.0'da mümkün değil AFAIK. Konumsal olmasını istemiyorsanız $ version parametresini kaldırmanız gerekir.

PowerShell 2.0'da

, size bir parametre özniteliği örneğin ek bilgi belirtmek hangi gelişmiş bir işlev oluşturarak istediğini elde edebilirsiniz:

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

ilk param gelen "Konumunu = 0" kaldırırsanız Tüm kalan paramlar konumsal paramıklara dönüyor gibi görünüyor. Birisinin, hangi _all_'ın isteğe bağlı olduğu bir dizi param oluşturabileceğine dair bir fikriniz var mı? – Fopedush

+0

Eğer 'Zorunlu = $ true' ayarlamazsanız (ya da sadece [Parameter()] 'i tamamen kaldırırsanız, bir parametre isteğe bağlı olarak kabul edilir. –

+0

Korkarım ki, konumsal parametreler olmayan bir param listesi oluşturamıyorum. Bir an için bu konuda ayrıntılı bir soru açacağım. – Fopedush

İlgili konular