Variables del sistema y comando de invocación de Powershell

Estoy trabajando en la automatización de parches para una aplicación de proveedor. Quería usar powershell para iterar sobre una lista de servidores y usar la comunicación remota para instalar en cada caja. Sin embargo, un aspecto me está dando un gran dolor de cabeza. Tengo que llamar a una secuencia de comandos cmd proporcionada por el proveedor para configurar las variables del sistema antes de ejecutar la secuencia de comandos de instalación. Entonces llamo al script así en powershell:

Invoke-Command -session $session {cmd /k ($args[0]+"\data\env.bat")} -Args $lesDestDir

Veo que se ejecuta mientras hace eco de su trabajo en mi ventana de PowerShell, pero las llamadas posteriores al script de instalación, es decir:

Invoke-Command -session $session {perl ".\rollout-2010.pl " $args[0] " NC"} -Args $rollout

inmediatamente sale diciendo que las diversas variables del sistema que utiliza no se han establecido. ¿Alguien puede explicarme el alcance de las variables del sistema? ¿Dejan de existir después de que se completa el comando de invocación? ¿Necesito unir las dos llamadas de script en un solo comando de invocación para que el segundo script pueda acceder a las variables del sistema o algo así?

preguntado el 29 de julio de 12 a las 03:07

2 Respuestas

Cambios hechos usando el SET comando son NO permanentes, se aplican a la actual cmd solo proceso y permanecer hasta el cmd el proceso finaliza.

Si es posible, configure la variable de entorno usando la sintaxis de PowerShell:

Invoke-Command -session $session {$env:myvar = 1}

Alternativamente, puede encadenar los comandos usando el separador de comandos cmd & Me gusta esto:

Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}

Respondido 29 Jul 12, 08:07

Tal vez me esté perdiendo algo, pero ¿no debería lo siguiente hacer eco de un valor de 1 entonces: Invoke-Command -session $session {cmd /k "set myvar=1" `& "echo %myvar%"} No produce ningún resultado . - justin holbrook

La expansión variable ocurre cuando se lee el comando (antes de que se establezca en su comando). Para retrasar la expansión de la variable, agregue el modificador /v cuando llame a cmd.exe y use ! en lugar de %: Invoke-Command -session $session {cmd /v /k "set mytar=2 & echo !mytar!"} - Jon Z

Gracias por los ejemplos y la explicación clara. Pude lograr lo que estaba trabajando. - justin holbrook

Sí, necesitas unirlos. Las variables de entorno se configuran en la primera sesión de cmd que sale, luego se inicia una segunda sin ellas.

Respondido 29 Jul 12, 03:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.