2013-06-11 9 views
9

olarak gösteriyorum Bir PowerShell betiğini bir .exe dosyasına göndereceğim. Bazı isteğe bağlı komut paramiklerine sahip olmak ve geri kalanını doğrudan exe'ye aktarmak istiyorum.İsteğe bağlı bir parametreyi yalnızca adlandırılmış olarak değil, konumsal olarak değil,

param (
    [Parameter(Mandatory=$False)] [string] $a = "DefaultA" 
    ,[parameter(ValueFromRemainingArguments=$true)][string[]]$ExeParams # must be string[] - otherwise .exe invocation will quote 
) 

Write-Output ("a=" + ($a) + " ExeParams:") $ExeParams 

Ben adlandırılmış param ile çalıştırırsanız, her şey harika:

C:\ > powershell /command \temp\a.ps1 -a A This-should-go-to-exeparams This-also 
a=A ExeParams: 
This-should-go-to-exeparams 
This-also 

benim param ihmal çalışırsanız, ilk adsız param kendisine atanan, ancak burada bir test senaryo :

C:\ > powershell /command \temp\a.ps1 This-should-go-to-exeparams This-also 
a=This-should-go-to-exeparams ExeParams: 
This-also 

ben beklenebilir:

a=DefaultA ExeParams: 
This-should-go-to-exeparams 
This-also 

Param için Position=0 eklemeyi denedim, ancak bu aynı sonucu veriyor.

Bunu başarmanın bir yolu var mı?
Belki farklı bir parametre şeması?

cevap

7

Varsayılan olarak, tüm işlev parametreleri konumsaldır. Windows PowerShell, parametrelerin işlevde bildirildiği sıraya göre parametrelere konum numaraları atar. Bu özelliği devre dışı bırakmak için, CmdletBinding özniteliğinin bağımsız değişkeninin değerini $False olarak ayarlayın.

a Look hüner yok at How to disable positional parameter binding in PowerShell

function Test-PositionalBinding 
{ 
    [CmdletBinding(PositionalBinding=$false)] 
    param(
     $param1,$param2 
    ) 

    Write-Host param1 is: $param1 
    Write-Host param2 is: $param2 
} 
+0

Yep var. Teşekkürler! – Jonathan

+0

Bunu Powershell 2.0'da çalışmaya alamıyorum - beklenen bu mu? – bacar

+0

Bunun Powershell 2.0'da çalıştığını sanmıyorum (blog yazısı bağlı olmadığını söylüyor ve [bu geçici çözüm] ile ilgilidir (http://social.technet.microsoft.com/Forums/windowsserver/en-US/ abbc587f-cd7e-4c8d-879f-355339d9d6b7/named-parameters-not-working-as beklenmiyor? forum = winserverpowershell # cf01c476-1831-4270-b462-ac7612240a56)) – ernie

İlgili konular