2011-08-22 20 views
46

Por alguna razón, parece que no puedo pasar una matriz de cadenas como parámetro para scriptblock. ¿Qué estoy haciendo aquí mal?¿Cómo pasar una matriz como parámetro a otra secuencia de comandos?

Mi script que se llama desde otro script:

param(
    [parameter(Mandatory=$true)] 
    [string[]]$myarr 
) 

foreach ($elem in $myarr){ 
$elem 
} 

lo llamo desde otro script como

[email protected]("111","222") 
start-job -filepath myscript.ps1 -arg $myarr 

consiguió sólo el primer elemento de la matriz - "111"

Respuesta

66

Pruébelo como a continuación:

start-job -filepath myscript.ps1 -arg (,$myarr) 

El -ArgumentList incluye una lista/matriz de argumentos. Entonces cuando das -arg $myarr, es como si pasaras los elementos de la matriz como argumentos. Por lo tanto, debe forzar a PowerShell a tratarlo como un único argumento que es una matriz.

+0

sí, funciona. ¿Puedes explicar porque? :) como lo entiendo, coma en() significa que en realidad es una matriz con dos matrices secundarias, ¿verdad? – mishkin

+7

@Mishkin - La explicación sería que ArgumentList toma una lista/matriz de argumentos. Entonces cuando das '-arg $ myarr', es como si pasaras los elementos de la matriz como argumentos. Entonces debes forzar a PowerShell para que lo trate como un único argumento que es una matriz. – manojlds

+0

¿Cómo pasaría la matriz y otra variable? -arg (, $ myarr, $ singleValue). Por ejemplo, $ singleValue = "x" – eHaze

Cuestiones relacionadas