2009-09-23 12 views
12

Tengo un script de PowerShell que comprueba que un determinado directorio se encuentra en la RUTA (mirando a través de $ env: ruta). Parece que $ env: path se carga y el alcance local de cada aplicación en el inicio, y ese alcance se transfiere a cualquier aplicación secundaria. Entonces ... si alguien abre Firefox, descarga mi programa, lo ejecuta, recibe un mensaje de que deben cambiar su ruta, soluciona el problema y luego ejecuta el programa nuevamente desde la ventana de descargas de Firefox, recibirá el mismo mensaje, a menos que Comienzan mi programa desde Explorer o reinician Firefox.

¿Hay alguna manera de volver a cargar $ env: path en mi secuencia de comandos de PowerShell para que obtenga el valor actual, como si se hubiera abierto desde el Explorador?

Respuesta

7

Si se ejecuta fuera del contexto de un navegador que le diría que use

[System.Environment]::SetEnvironmentVariable(string name, string value, EnvironmentVariableTarget target) 

para cambiar la variable de ruta de acceso para el usuario. Ese tercer parámetro le permite especificar Proceso, Usuario o Máquina. Si especifica User o Machine, el cambio es permanente y aparecerá en los bloques env de todos los programas que se inicien después de eso. Sin embargo, dado que se está ejecutando dentro del navegador, no creo que pueda hacerlo.

Si el usuario cambia su ruta, ese cambio estará disponible para futuras instancias del navegador. Otra opción es probar (Get-Command) la aplicación que necesita en la ruta y si no puede encontrarla, modifique $env:Path en el script cada vez que se ejecute. Es decir, a menos que no sepas cuál debería ser el camino.

+5

No, eso es lo que estaba buscando. [System.Environment] :: GetEnvironmentVariable ("PATH", "Machine") obtuvo la configuración actual de la ruta, independientemente de la aplicación desde la que se ejecutó mi script o cuando se abrió esa aplicación. Gracias por la ayuda. –

+0

chicos muy serviciales. Estaba tratando de guiar la instalación de mercurial y luego cloné inmediatamente un repositorio y esto me sirvió de algo. –

Cuestiones relacionadas