Guía Completa de Variables de Entorno en PowerShell

Última actualización: 9 de noviembre de 2026
Autor: Isaac
  • Diferenciación entre los ámbitos de proceso, usuario y máquina para gestionar la persistencia de los datos.
  • Métodos de manipulación mediante la sintaxis directa $Env, el proveedor de entorno Env: y la clase .NET System.Environment.
  • Configuración de variables críticas del sistema como PATH y PSModulePath para optimizar el funcionamiento del shell.

Primer plano desenfocado de código de programación colorido en un monitor, ideal como fondo técnico para un artículo de PowerShell.

Seguro que alguna vez te has topado con la necesidad de guardar rutas o configuraciones que tus programas puedan leer sin tener que escribirlas a mano cada vez. Aquí es donde entran en juego las variables de entorno, que básicamente son parejas de clave y valor que el sistema operativo mantiene para que tanto el software como los administradores tengan datos globales a mano sin complicaciones.

En el ecosistema de PowerShell, manejar estas variables es pan comido si sabes dónde mirar. No se trata solo de guardar un texto, sino de entender que estas variables pueden afectar a procesos hijos y sesiones secundarias, lo que las hace ideales para pasar credenciales o rutas de configuración entre diferentes capas de ejecución sin romper nada en el camino.

Formas de interactuar con las variables en la consola

Ingeniera de sistemas utilizando un portátil para monitorizar servidores en una moderna sala de datos.

Para empezar, la manera más rápida y habitual de tocar una variable es usando la sintaxis $Env:nombre_de_la_variable. Si quieres ver qué hay dentro de la carpeta de Windows, por ejemplo, basta con escribir $Env:windir. Para crear una nueva o cambiar una que ya existe, simplemente le asignas un valor entre comillas, como harías con cualquier variable normal, pero recuerda que aquí todo se almacena como cadenas de texto.

Si te apetece algo más estructurado, PowerShell nos regala el proveedor de entorno (Env:), que nos permite tratar las variables como si fueran archivos en una carpeta. Puedes usar el comando Get-ChildItem Env: para echar un vistazo a todo el inventario actual. Para añadir una variable nueva con este método, el comando New-Item es tu mejor aliado, mientras que Set-Item sirve para actualizar los valores y Remove-Item para borrar aquello que ya no necesites.

Para los que buscan un control más quirúrgico o están desarrollando scripts complejos, existe la clase de .NET [Environment]::SetEnvironmentVariable. Esta herramienta es especialmente potente porque nos permite decidir exactamente dónde queremos que se guarde la información, ya sea solo para el proceso actual, para el usuario que ha iniciado sesión o para todos los usuarios de la máquina.

El dilema de la persistencia y los ámbitos

Aquí es donde mucha gente se pega un susto: cambian una variable y, al cerrar la consola, ¡puf!, ha desaparecido. Esto pasa porque, por defecto, usar $Env: solo afecta al ámbito del proceso. Es decir, la variable vive y muere con esa ventana de PowerShell. Es muy útil para pruebas rápidas, pero no para configuraciones permanentes.

Si quieres que el cambio sea eterno, tienes tres caminos principales en Windows. Primero, puedes meter la configuración en tu perfil de PowerShell (el archivo que se ejecuta cada vez que abres la consola), lo cual funciona en cualquier sistema operativo. Segundo, puedes usar el método de .NET mencionando el ámbito ‘User’ o ‘Machine’. Tercero, si prefieres no tocar código, siempre puedes ir al Panel de Control, buscar la configuración avanzada del sistema y editar las variables desde la interfaz gráfica.

Es fundamental saber que las variables de ámbito de máquina requieren permisos de administrador; si intentas cambiarlas como un usuario normal, PowerShell te dará un error de acceso denegado. Por otro lado, las variables de usuario son privadas y no molestan a los demás perfiles del equipo, mientras que las de proceso son heredadas por los procesos hijos, lo que permite que un script lance otro programa que ya conozca esos valores.

Variables críticas y configuración de PowerShell

Pasillo de racks de servidores en un centro de datos, representando la infraestructura gestionada mediante variables de entorno.

Hay algunas variables que el propio PowerShell usa para ajustar su comportamiento. Por ejemplo, la PSModulePath es vital porque le dice al shell dónde buscar los módulos instalados. Si instalas herramientas en rutas raras, tendrás que añadir esas carpetas a esta variable para que PowerShell no te diga que el comando no existe.

También tenemos variables para controlar la telemetría y las actualizaciones, como POWERSHELL_TELEMETRY_OPTOUT o POWERSHELL_UPDATECHECK. Si no quieres que Microsoft reciba datos de uso o quieres silenciar los avisos de nuevas versiones, basta con jugar con estos valores antes de arrancar la sesión. Además, la variable PSExecutionPolicyPreference permite definir la política de ejecución de scripts solo para la sesión actual, evitando tener que cambiar la configuración global del sistema.

No podemos olvidar la famosísima variable PATH. Esta es la lista de directorios donde Windows busca los ejecutables. Cuando escribes git o python y el programa arranca, es porque el sistema ha rastreado el PATH. Para añadir una ruta nueva sin borrar las anteriores, lo ideal es usar el operador +=, añadiendo un punto y coma como separador para que Windows no se haga un lío.

Particularidades en Linux y macOS

Si usas PowerShell Core en sistemas Unix, las reglas cambian un poco. Lo primero que debes grabar a fuego es que en Linux y macOS los nombres de las variables distinguen entre mayúsculas y minúsculas. No es lo mismo $Env:PATH que $Env:path; para el sistema son dos cosas totalmente distintas, a diferencia de Windows donde da igual cómo lo escribas.

En estas plataformas, la persistencia no se gestiona mediante el registro en Windows, sino a través de archivos de configuración del shell. Para que una variable sea global, deberás editar archivos como /etc/environment o los scripts en /etc/profile.d. Si prefieres que solo afecte a tu usuario, lo normal es añadir las definiciones en el archivo .bashrc o .zshrc, dependiendo de qué terminal estés usando como base.

Consejos para no romper el sistema

Detalle de una unidad de servidor moderna en un entorno de centro de datos iluminado en azul.

Para mantener la casa limpia, lo mejor es usar nombres descriptivos. En lugar de llamar a una variable VAR1, usa algo como PROYECTO_DB_CONNECTION. Esto te ahorrará muchos dolores de cabeza cuando vuelvas a leer el script dentro de seis meses. Además, es una práctica muy recomendable evitar guardar contraseñas o claves de API directamente en el código; es mucho más seguro cargarlas desde variables de entorno que solo existan en la máquina de producción.

Cuando trabajes con la variable PATH, ten muchísimo cuidado. Sobrescribir el PATH en lugar de añadirle contenido puede hacer que dejen de funcionar comandos básicos del sistema, obligándote a usar rutas completas para todo. Siempre verifica que la variable existe antes de modificarla y, si puedes, haz una copia de seguridad del valor actual antes de hacer cambios drásticos.

Dominar el uso de las variables de entorno permite pasar de escribir scripts rígidos a crear herramientas flexibles y portátiles que se adaptan al entorno donde se ejecutan. Ya sea manipulando la unidad Env:, ajustando el perfil de usuario o recurriendo a la potencia de .NET, la clave está en elegir el ámbito correcto para asegurar que la información esté disponible exactamente cuando se necesita y desaparezca cuando ya no es útil.