Piszę skrypt PowerShell, który jest opakowaniem dla .exe. Chcę mieć opcjonalne parametry skryptów i przekazać resztę bezpośrednio do exe. Oto skrypt testowy:Akceptowanie opcjonalnego parametru tylko jako nazwanego, bez położenia
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
Jeśli biegnę z nazwanego param, wszystko jest super:
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
Jednakże, jeśli staram się pomijać moje param, pierwsza nienazwana param jest przypisany do niego :
C:\ > powershell /command \temp\a.ps1 This-should-go-to-exeparams This-also
a=This-should-go-to-exeparams ExeParams:
This-also
spodziewałbym:
a=DefaultA ExeParams:
This-should-go-to-exeparams
This-also
Próbowałem dodać Position=0
do parametru, ale to daje taki sam wynik.
Czy istnieje sposób, aby to osiągnąć?
Może inny schemat parametrów?
Tak, to załatwia sprawę. Dzięki! – Jonathan
Nie mogę uruchomić tego w Powershell 2.0 - czy jest to oczekiwane? – bacar
Nie sądzę, żeby to działało w Powershell 2.0 (blog, do którego link jest podłączony, mówi, że nie, i odnosi się do [tego obejścia] (http://social.technet.microsoft.com/Forums/windowsserver/en-US/ abbc587f-cd7e-4c8d-879f-355339d9d6b7/named-parameters-not-working-as-expected? forum = winserverpowershell # cf01c476-1831-4270-b462-ac7612240a56)) – ernie