2011-09-14 18 views
7

Temel parametreyi ilk değerlendiren ve bilgisayarda bir program çalıştıran PowerShell'de bir sarıcı işlevi yazmaya çalışıyorum. Sarıcı işlevine kalan tüm parametreler daha sonra da çalıştırılan programa geçirilmelidir.PowerShell'de Sarmalayıcı işlevi: Kalan parametreleri geçir

Yani böyle bir şey görünmelidir:

function test ([string] $option) 
{ 
    if ($option -eq 'A') 
    { 
     Write-Host $args 
    } 
    elseif ($option -eq 'B') 
    { 
     . 'C:\Program Files\some\program.exe' $args 
    } 
} 

Şimdi sadece çalışmıyor $args ekleyerek, bu yüzden ne o iş yapmak için ne yapmak gerekiyor? Başka bir seçenek muhtemelen Invoke-Expression kullanıyor olabilir, ama eval gibi bir şey hissediyor, bu yüzden eğer mümkünse kaçınmak istiyorum ve buna ek olarak, bunu sadece dize-sadece parametrelere sınırlayacağını düşünüyorum? Mümkünse sarılmış program/cmdlet'in tam desteğine sahip olmak isterim - temel olarak dinamik bir takma isim gibi. Bu mümkün mü?

cevap

10

Bu türden bir şey sizin istediğiniz şeyi yapar. Çizgi öneki seçeneklerin, PowerShell ortak parametrelerine çakışmayan veya belirsizliğe neden olan yürütülebilir dosyaya geçmeniz gerekiyorsa sorun yaşayabilirsiniz. Ama bu başlamanıza neden olabilir. Yazdığınız ne

function Invoke-MyProgram 
{ 
    [CmdletBinding()] 
    Param 
    (
     [parameter(mandatory=$true, position=0)][string]$Option, 
     [parameter(mandatory=$false, position=1, ValueFromRemainingArguments=$true)]$Remaining 
    ) 

    if ($Option -eq 'A') 
    { 
     Write-Host $Remaining 
    } 
    elseif ($Option -eq 'B') 
    { 
     & 'C:\Program Files\some\program.exe' @Remaining # NOTE: @ not $ (splatting) 
    } 
} 
2

(else if de sözdizimi hatası dışında - bu elseif olmalıdır) çalışır. $args'un, işlev tarafından beklenen parametrelerin üzerinde ve üstünde olan adsız argümanlar olduğunu unutmayın. Eğer 1,2,3

Not olacak

test -option "A" 1 2 3 

$args olarak testini ararsanız

Yani

olarak deney ararsanız o
test -option "A" -other "B" 1 2 3 

$args olacak -other,B,1,2,3

İlgili konular