2010-08-02 21 views
6

Voglio iniziare uno script1.ps1 da un altro script con argomenti memorizzati in una variabile.powershell: script con argomenti variabili

$para = "-Name name -GUI -desc ""this is the description"" -dryrun"
. .\script1.ps1 $para

Gli argomenti che ricevo in script1.ps1 assomiglia:

args [0]: nome -Name -gui -desc "questa è la descrizione" -dryrun

quindi questo non è quello che volevo ottenere. Qualcuno ha un'idea di come risolvere questo problema?
thx lepi

PS: Non è sicuro quanti argomenti la variabile conterrà e come verranno classificati.

risposta

5

Utilizzando Invoke-Expression è un altro aternative:

$para = '-Name name -GUI -desc "this is the description" -dryrun' 
Invoke-Expression -Command ".\script1.ps1 $para" 
+0

thx, il risultato è alla fine lo stesso ma questa è la vera variante bella e corta! – lepi

7

È necessario utilizzare splatting operator. Guarda powershell team blog o qui allo stackoverflow.com.

Ecco un esempio:

@' 
param(
    [string]$Name, 
    [string]$Street, 
    [string]$FavouriteColor 
) 
write-host name $name 
write-host Street $Street 
write-host FavouriteColor $FavouriteColor 
'@ | Set-Content splatting.ps1 

# you may pass an array (parameters are bound by position) 
$x = 'my name','Corner' 
.\splatting.ps1 @x 

# or hashtable, basically the same as .\splatting -favouritecolor blue -name 'my name' 
$x = @{FavouriteColor='blue' 
    Name='my name' 
} 
.\splatting.ps1 @x 

Nel tuo caso è necessario chiamare in questo modo:

$para = @{Name='name'; GUI=$true; desc='this is the description'; dryrun=$true} 
. .\script1.ps1 @para 
+0

thx per l'anwser , funziona perfettamente ora! – lepi

+0

Sono contento di aver aiutato. Se sei soddisfatto della/e risposta/e, puoi chiudere le domande accettando la risposta;) – stej

+0

Dove l'operatore _splatting_? Non c'è operatore qui questo sembra essere il modo in cui PowerShell elabora i comandi ... cioè è una funzionalità, non un operatore. –