Я пишу сценарий PowerShell, который является оболочкой для .exe. Я хочу иметь некоторые необязательные параметры сценария, а остальные передать непосредственно в exe. Вот тестовый скрипт:
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
Если я запускаю с именованным параметром, все отлично:
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
Однако, если я попытаюсь опустить свой параметр, ему будет назначен первый безымянный параметр:
C:\ > powershell /command \temp\a.ps1 This-should-go-to-exeparams This-also
a=This-should-go-to-exeparams ExeParams:
This-also
я бы ожидал:
a=DefaultA ExeParams:
This-should-go-to-exeparams
This-also
Я попытался добавить Position=0
к параметру, но это дало тот же результат.
Есть ли способ добиться этого?
Может быть, другая схема параметров?