En Linux, puedo hacer:
$ FOO=BAR ./myscript
para llamar a "myscript" con la variable de entorno FOO configurada.
¿Es posible algo similar en PowerShell, es decir, sin tener que configurar primero la variable, llamar al comando y luego desarmar la variable nuevamente?
Para ser más claro sobre mi caso de uso, no quiero usar esto como parte de un script. Más bien, tengo un script de terceros cuyo comportamiento puedo controlar usando variables de entorno, pero, en este caso, no argumentos de línea de comando. Entonces, poder alternar entre escribir
$ OPTION=1 ./myscript
y
$ ./myscript
sería muy útil.
windows
powershell
scripting
variables
environment
miracle2k
fuente
fuente
Respuestas:
Generalmente, sería mejor pasar información al script a través de un parámetro en lugar de una variable global (de entorno). Pero si eso es lo que necesita hacer, puede hacerlo de esta manera:
La variable de entorno $ env: FOO se puede eliminar más tarde así:
fuente
env:foo
restablecer su valor anterior (quizás no establecido) en lugar de eliminarlo?& {$pre = $env:foo; $env:foo = 'bar'; ./myscript; if ($pre) {$env:foo = $pre} else {Remove-Item env:\foo}
... algunos podrían decir que son difíciles de manejar , pero evitarán los efectos secundarios ...Me motivé lo suficiente sobre este problema que seguí adelante y escribí un script para él: with-env.ps1
Uso:
Por otro lado, si instala Gow , puede usar el
env.exe
que podría ser un poco más robusto que el script rápido que escribí anteriormente.Uso:
fuente
2 formas sencillas de hacerlo en una sola línea:
Solo resumió la información de otras respuestas (gracias amigos) que no contienen frases ingeniosas por alguna razón.
fuente
Para lograr el equivalente de la sintaxis de Unix, no solo debe establecer la variable de entorno, sino que debe restablecerla a su valor anterior después de ejecutar el comando. Lo logré para los comandos comunes que uso agregando funciones similares a las siguientes a mi perfil de PowerShell.
También lo
mycmd
es algún ejecutable que opera de manera diferente dependiendo del valor de la variable de entornoapp_master
. Al definircmd_special
, ahora puedo ejecutarcmd_special
desde la línea de comando (incluidos otros parámetros) con laapp_master
variable de entorno configurada ... y se restablece (o incluso se desarma) después de la ejecución del comando.Presumiblemente, también podría hacer esto ad-hoc para una única invocación.
Realmente debería ser más fácil que esto, pero aparentemente este no es un caso de uso que sea compatible con PowerShell. Quizás una versión futura (o función de terceros) facilite este caso de uso. Sería bueno si PowerShell tuviera un cmdlet que hiciera esto, por ejemplo:
Quizás un gurú de PowerShell pueda sugerir cómo se podría escribir tal cmdlet.
fuente
Teniendo en cuenta que CMD es la CLI nativa en el kernel de Windows (y sigue siendo la interfaz de automatización de muchas herramientas), es posible que esté ejecutando su script de PowerShell con
powershell.exe
desde el indicador de CMD o una interfaz que acepte declaraciones de consola CMD.Si está utilizando el
-File
parámetro para pasar su secuencia de comandospowershell.exe
, no se puede usar ningún otro código de PowerShell para establecer una variable de entorno para que acceda la secuencia de comandos, por lo que puede configurar sus variables de entorno en el entorno CMD antes de llamarpowershell.exe
:Un solo
&
también funcionará, pero permitirá que el comando continúe si elset
falla por alguna razón. (¿Es esto posible? No tengo ni idea).Además, puede ser más seguro envolver
"foo=bar"
entre comillas para que nada de lo siguiente se paseset
como contenido de la variable.fuente
https://gist.github.com/bobalob/6632690e33747c13a8c00875ee686be2
fuente
Puede aplicar el alcance de las variables a funciones y scripts.
New-Variable también tiene un parámetro -scope si quieres ser formal y declarar tu variable usando new-variable.
fuente