Búsqueda de sitios web

Cómo configurar una variable de entorno en PowerShell


El sistema operativo y las aplicaciones utilizan las variables de entorno para almacenar ajustes de configuración, rutas del sistema y otra información. Todos los programas de su computadora pueden acceder a estos datos. Podemos usar PowerShell para ver, cambiar o configurar una variable de entorno.

Para configurar variables de entorno (env), normalmente usa la pantalla Propiedades del sistema, pero cuando necesita agregar o cambiar una variable en varias computadoras, es más fácil usar PowerShell.

En este artículo, explicaré las diferentes variables de entorno y cómo configurar variables de entorno con PowerShell.

Variables de entorno

Antes de ver cómo administrar las variables con PowerShell, primero echemos un vistazo más de cerca a las variables de entorno (env) para comprenderlas mejor. Las variables de entorno son básicamente pares clave-valor que forman parte del entorno en el que se ejecuta un proceso.

Hay tres ámbitos en Windows donde se puede definir una variable de entorno:

  • Alcance del usuario

  • Alcance de la máquina (sistema)

  • Alcance del proceso

El alcance del usuario contiene principalmente rutas a la carpeta de perfil del usuario, como OneDrive, Appdata o carpeta temporal. En el alcance de la máquina, encontrará información sobre el dispositivo y variables cruciales para que el sistema encuentre y ejecute comandos o programas sin necesidad de especificar la ruta completa cada vez.

El alcance del proceso contiene las variables del proceso actual (o sesión de PowerShell). También enumerará todas las variables de los ámbitos del usuario y de la máquina. Las variables personalizadas agregadas al alcance del proceso se perderán cuando se cierre la sesión.

Por lo tanto, para configurar variables de entorno que permanezcan disponibles después de un reinicio y para todos los usuarios, deberá almacenarlas en el ámbito de la máquina. Para hacer esto, necesitará tener los permisos correctos para hacerlo.

Obtener variables de entorno con PowerShell

Antes de agregar nuevas variables de entorno a nuestro sistema, primero veamos cómo obtener las variables en PowerShell. Podemos usar dos métodos para obtener y configurar variables de entorno en Powershell, el método .NET [System.Environment] y el proveedor de entorno de PowerShell $env:.

Para enumerar todas las variables de entorno, puede utilizar uno de estos comandos:

# .NET method
[System.Environment]::GetEnvironmentVariables()

# Environment provider, sorting them by name
Get-Item env:* | sort-object name

# Or in short:
gi env:* | sort name

# Using the drive method
dir env:

La ventaja del método .NET es que puede especificar el alcance de la variable. De esta manera solo podemos enumerar las variables de entorno del usuario, por ejemplo. Pero cuando sabes qué variable necesitas, o quieres verlas todas, entonces el proveedor de Entorno es, por supuesto, mucho más corto.

Entonces, para ver solo las variables de entorno del usuario, podemos especificar el alcance del usuario en el método .NET. Otras opciones son Máquinao Proceso

# Replace User with Machine or Process to view the other scopes
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)

Ver variable de entorno específica

Si desea verificar el valor de una variable específica, necesitará saber al menos el nombre. Luego podemos usar el método $env: para ver el valor de la variable:

# Get the OneDrive folder path
$env:OneDrive

Si no sabe el nombre exacto de la variable o desea ver todas las variables relacionadas con OneDrive, por ejemplo, puede usar el cmdlet Get-Item combinado con un comodín * :

# Get all variables that start with OneDrive
Get-Item env:OneDrive*

# Result
Name                           Value
----                           -----
OneDrive                       C:\Users\ruud\OneDrive - Pixel Supply
OneDriveConsumer               C:\Users\ruud\OneDrive
OneDriveCommercial             C:\Users\ruud\OneDrive - Pixel Supply

# Or get all variables that contain the word Path
Get-Item env:*Path*

También podemos obtener la variable de entorno con el método .NET. Para ello, necesitará utilizar el comando [System.Environment]::GetEnvironmentVariable. Tenga en cuenta que este comando parece casi idéntico al método .NET, excepto que falta el s al final.

Para enumerar el valor de la variable OneDrive, podemos usar el siguiente comando. Tenga en cuenta que también podemos especificar el alcance de la variable, pero eso no es necesario.

[System.Environment]::GetEnvironmentVariable("OneDrive", "User")

Establecer la variable ENV en PowerShell

Para configurar una variable de entorno (env) en PowerShell, puede utilizar dos métodos, el proveedor de entorno o el método [System.Environment]::SetEnvironmentVariable. Se recomienda este último, porque también le permite configurar y cambiar variables en el alcance de la máquina (sistema).

Por ejemplo, para crear una nueva variable de entorno TenantId, con nuestro ID de inquilino como valor, podemos usar el siguiente comando:

[System.Environment]::SetEnvironmentVariable('TenantId','11e1234-28gv-4413-aaf8-a1e8b7f4c3d6')

Ahora, si miramos la variable, podemos ver que está configurada en el valor deseado:

Pero hay un problema: si cierra PowerShell, la variable de entorno desaparece. La razón de esto es que cualquier variable que agregue se almacena en el alcance del proceso de forma predeterminada. Podemos resolver esto agregando el alcance requerido, por ejemplo, el alcance de la máquina:

Nota

Para agregar o cambiar variables en el alcance de la máquina, necesitará tener permisos elevados. Ejecute PowerShell en modo elevado (administrador); de lo contrario, aparecerá el error "El acceso al registro solicitado no está permitido".
[System.Environment]::SetEnvironmentVariable('TenantId','11e1234-28gv-4413-aaf8-a1e8b7f4c3d6', 'Machine')

Si ahora miramos las variables env desde el alcance de la máquina, verá que están en la lista:

Otra opción para agregar una variable de entorno persistente es agregar la variable en su perfil de PowerShell. De esta manera, la variable de entorno se agrega/actualiza cada vez que abre PowerShell.

Por ejemplo, para agregar una nueva variable y actualizar la variable de ruta predeterminada, puede agregar las dos líneas siguientes en su perfil de Powershell:

$Env:UserPrincipalName = 'lab@lazyadmin.nl'
$Env:Path += ';C:\Tools

Agregar variables ENV temporales

Cuando no especifica un alcance al agregar una variable, se almacena automáticamente en el alcance del proceso. Esto significa que la variable se pierde cuando cierra su sesión de PowerShell. Entonces, este método es excelente cuando necesitas agregar una variable de entorno temporal.

Para hacer esto podemos usar el método .NET descrito anteriormente, o podemos usar la sintaxis de variable o el proveedor de entorno. La sintaxis de variable $Env: es el método más sencillo para configurar o actualizar rápidamente una variable:

$env:UserPrincipalName = 'lab@lazyadmin.nl'

Si necesita actualizar el valor, simplemente puede cambiarlo estableciendo un nuevo valor. Los valores son siempre una cadena, lo que significa que podemos agregar valores a la variable con el operador +=. Esto le permite agregar una ruta a la variable PATH existente, por ejemplo.

# Change the value of the variable
$env:UserPrincipalName = 'test@lazyadmin.nl'

# Adding a value to the existing one:
$env:Path += ';d:\scripts'

Otro método para crear o actualizar las variables es utilizar el proveedor de entorno. Por ejemplo, para agregar rápidamente una variable de entorno, puede utilizar el cmdlet New-Item:

New-Item -Path Env:\UserPrincipalname -Value 'lab@lazyadmin.nl'

# Result
Name                           Value
----                           -----
UserPrincipalname              lab@lazyadmin.nl

Para actualizar o cambiar el valor de la variable, puede utilizar el cmdlet Set-Item:

# Change the variable
Set-Item -Path Env:\UserPrincipalname -Value 'test@lazyadmin.nl'

Eliminación de variables ambientales

Una variable de entorno no puede estar vacía. Entonces, para eliminarlo, podemos establecer el valor en una cadena vacía (o $null), o podemos usar el cmdlet Remove-Item para eliminar la variable.

Para establecer una variable env en PowerShell como una cadena vacía, puede utilizar uno de los métodos descritos anteriormente:

# Set the variable to $null
$env:UserPrincipalName = $null

# Change it to an empty string
$env:UserPrincipalName = ''

# Set it to an empty string with the .NET method
[Environment]::SetEnvironmentVariable('UserPrincipalName ', '', 'Machine')

# Or use the Environment provider
Set-Item -Path Env:\UserPrincipalname -Value ''

Otra opción es utilizar el cmdlet Remove-Item. Tendrá el mismo efecto que los métodos anteriores, pero quizás quede un poco más claro que en realidad estás eliminando la variable.

Remove-Item -Path Env:\UserPrincipalname

Terminando

Existen diferentes métodos para configurar una variable env en PowerShell. El método más sencillo es, por supuesto, utilizar la variable de entorno, $env:. Pero si desea crear una variable persistente, deberá utilizar el método .Net y establecer el alcance en máquina.

Tenga en cuenta que al crear una variable debe volver a verificar si la variable aún no existe. Sobrescribir variables del sistema puede tener efectos negativos en otros programas.

Espero que este artículo te haya ayudado, si tienes alguna pregunta, deja un comentario a continuación.

Artículos relacionados