2011-08-08 28 views
6

Antecedentes: que tienen una secuencia de comandos de PowerShell: script1 que lleva en un sourceDirectory y dos destinos (llamarlos dest1Directory y dest2Directory).PowerShell: Obtener resultado regreso de Powershell de secuencias de comandos se llama desde otro script PS

El sourceDirectory está estructurado de la siguiente manera:

\ Source \ Dest1 \ stuff1

y

\ Source \ dest2 \ stuff2

script1 llamadas otra secuencia de comandos: script2, foreach STUFF (así que script2 se puede ejecutar 10 veces, por ejemplo), proporcionando script2 con el parámetro de destino necesario, que crea copias de seguridad de todos los contenidos "STUFF" reemplazando en dest1Directory y dest2Directory, y luego copia todo STUFF al destino correspondiente

Script1:

foreach ($folder in $STUFF1) 
{   
& $script2 -stuffParameter $folder -destDrive $dest1Directory -backUpDrive $BackUpDirectory 
} 

El problema que estoy teniendo es:

estoy llamando script1 de un sitio web de Visual Studio y me gustaría script2 a la salida de todas las rutas de directorio de copia de seguridad se crea así que tengo referencias a ellos para más tarde. He intentado esto en el interior de script2:

$returnRollBackObj = New-Object Object 
Add-Member -memberType NoteProperty -name "RollBackLocation" -value $folderobj -inputObject $returnRollBackObj 
return $returnRollBackObj 

Pero no parece volver a los objetos puesto que son llamadas subíndice. No sé cómo devolver un número indefinido de estos objetos desde script1, así que estoy perdido. ¿Alguien me puede ayudar?

Respuesta

11

Cualquier salida no capturada se devuelve en Powershell.

así que algo como

return $returnRollBackObj 

es equivalente a

$returnRollBackObj 
return 

lo tanto, ya SCRIPT2 está regresando estos objetos, siempre que estos objetos no son capturados en script1, que serán devueltos por script1 también. Por lo tanto, no tiene que hacer nada para "devolver un número indefinido de objetos"

Primero intente ejecutar los scripts desde la consola, para ver si está obteniendo el comportamiento deseado.

+0

Pensé mucho pero cuando lo probé no funcionó como esperaba. Tengo 'script1' llamando a' script2' con retornos no capturados, sin embargo, solo la declaración de retorno de 'script1' se envía a mi consola. Sin embargo, hay un montón de salida 'Write-Host/Write-Warning' que funciona bien desde' script2'. –

+0

@Evan Layman - ¿Qué quieres decir con return from script1? – manojlds

+0

Lo siento, no creí que fuera necesario incluir esto: tengo otro objeto que contiene una ubicación de registro devuelta por 'script1' (y esto funciona correctamente) –

2

¿Cómo está su configuración de IIS?

Solo estoy pensando, si tiene eimpersonation activado, que podría no tener acceso a la ubicación del segundo script debido al problema del doble salto.

Algo más que puede ayudar es la funcionalidad de la transcripción.Agregue una transcripción de inicio en la parte superior de su secuencia de comandos/código y obtendrá un volcado de todo, comandos y resultados (inc. Errores y advertencias).

Editar:

acabo de dar cuenta de su no asignar los valores devueltos desde SCRIPT2 a aaything en script1.

Es posible que tenga algo como esto:

$ ret = & $ SCRIPT2 ...

Hacer algo con $ ret ...

o ponerlo en una matriz $ ret = @()

bucle For ...

$ temp = & $ SCRIPT2 ... $ ret = $ ret + $ temp

A continuación, devuelva $ ret después del ciclo for.

Matt

+0

Ambas buenas ideas, sin embargo, esto está sucediendo cuando lo pruebo a través de un comando powershell prompt (y el segundo script definitivamente se ejecuta correctamente, además de la salida), y realmente tengo una transcripción en ejecución, sin embargo, no me ayuda con este problema. –

+0

No creo que ejecutar desde el símbolo del sistema niegue un problema de doble salto, esperaría que funcionara. Dicho esto, me doy cuenta de que no estás haciendo nada con la variable devuelta. Edité mi respuesta para mostrar eso. – Matt

+0

Lo intentaré, pero calculé que los retornos de script2 se propagarían. Tal vez no :). Gracias por la muestra –

Cuestiones relacionadas