¿Por qué mi variable de entorno PATH es diferente del símbolo del sistema?

11

Un poco de información importante: mi empresa tiene un script genérico de inicio de sesión VBS que realiza modificaciones en la variable de entorno PATH del usuario al iniciar sesión y me permite ejecutar software que depende de recursos compartidos de archivos DFS asignados. También instalé recientemente el SDK de Windows Powershell en mi máquina Windows 7 Enterprise e intenté modificar mi variable de entorno PATH desde la línea de comandos de Powershell.

Después de esto, noté que ya no podía ejecutar aplicaciones que corresponden a estas modificaciones de la RUTA de inicio de sesión y que la RUTA del editor de variables de entorno se configuró en algo diferente de lo que aparecía cuando emití un 'echo %PATH%'comando desde el símbolo del sistema.

Entonces, por ejemplo (simplificación), desde el editor de variables de entorno ( My Computer properties -> Advanced System Settings -> Environment Variables) tuve

 C:\MyDir\; C:\MyOtherDir

mientras que cuando lo hice 'echo %PATH%'desde un símbolo del sistema obtuve:

 C:\MyDir\

¿Alguien más ha tenido un problema similar y hubo algún tipo de resolución? Cuando busqué en Google ayuda, me encontré con esto:

(¿Relacionado?) Hilo StackOverflow

Se me ocurrió que si el script de inicio de sesión fue iniciado por algo diferente a mi entorno Explorer.exe, entonces ese era el problema. Sin embargo, cuando ejecuté el script de inicio de sesión, mi RUTA desde el símbolo del sistema no cambió. ¿Qué tendría esto que ver con PowerShell? Me falta cómo se conecta esto completamente a esa instalación.

La coincidencia de patrones
fuente
¿Cómo modificó la ruta en powershell? ¿Dónde hiciste eco% PATH%? En cmd.exe?
Werner Henze
LA RESPUESTA A CONTINUACIÓN ES GENIO.
SDsolar

Respuestas:

11

Windows tiene dos clases de variables de entorno, variables de entorno del sistema y variables de entorno del usuario . Si está utilizando echo %PATH%, verá su variable de entorno de usuario PATH . Solo si no hay una variable de usuario definida, la variable del sistema estará vigente para los procesos de usuario.

El PATHseparador ;no debe ir seguido de un espacio en blanco.

La siguiente nota de Microsoft podría ser útil:

Puede modificar las variables de entorno del usuario editando la siguiente clave del Registro:

   HKEY_CURRENT_USER \ 
         Environment

Puede modificar las variables de entorno del sistema editando la siguiente clave del Registro:

   HKEY_LOCAL_MACHINE \ 
               SYSTEM \ 
    CurrentControlSet \ 
              Control \ 
      Session Manager \ 
          Environment

Tenga en cuenta que cualquier variable de entorno que deba expandirse (por ejemplo, cuando la use %SYSTEM%) debe almacenarse en el registro como un REG_EXPAND_SZvalor de registro. Cualquier valor de tipo REG_SZno se expandirá cuando se lea desde el registro.

Comentario adicional: cada vez que un proceso cambia su entorno (en lugar de la configuración del registro que define el entorno para nuevos procesos), los cambios solo son visibles para los procesos secundarios.

Axel Kemper
fuente
1
Me gustaría enfatizar el punto de Axel si necesita modificar las Variables Ambientales, entonces necesita hacer el cambio en el registro. De hecho, creé una función PowerShell para ayudar con esto: computerperformance.co.uk/powershell/powershell_env_path.htm
Guy Thomas
1
No hay valores para modificar, solo dos variables tmpy temp. ¿Estás seguro de que esta es la ruta para el usuario, que debería modificarse?
Johnny_D
Esto no parece funcionar (antes de un reinicio, al menos). La variable de ruta no está en HKCU \ Environment, la variable de ruta en cmd.exe se muestra correctamente, pero las aplicaciones iniciadas siguen viendo la variable de ruta anterior.
Martin Argerami
@ Martin: sí, la aplicación iniciada no reconoce los cambios en el registro, ya que obtienen su copia de memoria del entorno durante el inicio de la aplicación. Esta copia depende del proceso principal que inicia los subprocesos. Si, por ejemplo, se inician desde el Explorador de Windows, deberá reiniciar el Explorador para obtener la nueva RUTA.
Axel Kemper
¡Lo has clavado en la cabeza! La ruta allí estaba agregando algunos programas que sabía que se habían eliminado, como Microsoft SQL. Sabía que no provenía de la ruta de propiedades del sistema que había establecido. Muchas gracias, desde el futuro, publicaste esta respuesta hace más de 3 años.
SDsolar