2010-08-02 18 views
6

Quiero iniciar un script1.ps1 desde otro script con argumentos almacenados en una variable.powershell: script con variables args

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

Los argumentos que recibo en script1.ps1 parece:

args [0]: nombre -Nombre -gui -desc "esta es la descripción" -dryrun

así que esto no es lo que quería obtener. ¿Alguien tiene una idea de cómo resolver este problema?
thx lepi

PD: No se sabe cuántos argumentos contendrá la variable y cómo se clasificarán.

Respuesta

5

Usando Invoke-Expression es otra aternative:

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

thx, el resultado es al final el mismo, pero esta es la variante muy buena y corta! – lepi

7

Debe utilizar operador de splating. Mira powershell team blog o aquí en stackoverflow.com.

Aquí se muestra un ejemplo:

@' 
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 

En el caso de que necesite llamar así:

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

THX para la anwser , funciona perfectamente ahora! – lepi

+0

Me alegro de haber ayudado. Si está satisfecho con la (s) respuesta (s), puede cerrar las preguntas aceptando la respuesta;) – stej

+0

¿Dónde el operador _splatting_? No hay ningún operador aquí. Esta es la forma en que PowerShell procesa los comandos ... es decir, es una característica, no un operador. –

Cuestiones relacionadas