Sto scrivendo uno script PowerShell che è un wrapper di un file .exe. Voglio avere alcuni parametri di script opzionali e passare il resto direttamente all'exe. Ecco uno script di test:Accettazione di un parametro opzionale solo come indicato, non posizionale
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
Se corro con il un parametro di nome, tutto è grande:
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
Tuttavia, se provo a omettere il mio param, il primo parametro senza nome viene assegnato ad esso :
C:\ > powershell /command \temp\a.ps1 This-should-go-to-exeparams This-also
a=This-should-go-to-exeparams ExeParams:
This-also
mi si aspetterebbe:
a=DefaultA ExeParams:
This-should-go-to-exeparams
This-also
Ho provato ad aggiungere Position=0
al parametro, ma questo produce lo stesso risultato.
C'è un modo per raggiungere questo obiettivo?
Forse uno schema di parametri diverso?
Yep, che fa il trucco. Grazie! – Jonathan
Non riesco a farlo funzionare in Powershell 2.0 - è previsto? – bacar
Non penso che funzioni in Powershell 2.0 (il post di blog collegato dice che non funziona e fa riferimento a [questa soluzione] (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