Discusión
En los archivos por lotes, las variables de entorno son la principal forma de almacenar información temporal o de transferir información entre archivos por lotes. Las variables de PowerShell y los parámetros de script son formas más eficaces de resolver esos problemas, pero las variables de entorno siguen proporcionando una forma útil de acceder a la configuración común del sistema, como la ruta del sistema, el directorio temporal, el nombre de dominio, el nombre de usuario y mucho más.
PowerShell hace aflorar las variables de entorno a través de su proveedor de entorno: un contenedor que le permite trabajar con las variables de entorno de forma similar a como lo haría con los elementos del sistema de archivos o los proveedores del registro. Por defecto, PowerShell define una unidad env: (muy parecida a c: o d:) que proporciona acceso a esta información:
PS > dir env:Name Value---- -----Path c:\progra~1\ruby\bin;C:\WINDOWS\system32;C:\TEMP C:\DOCUME~1\Lee\LOCALS~1\TempSESSIONNAME ConsolePATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;(...)
Dado que se trata de una unidad normal de PowerShell, la forma completa de obtener el valor de una variable de entorno tiene este aspecto:
PS > Get-Content Env:\UsernameLee
Cuando se trata de variables de entorno, sin embargo, esa es una sintaxis que casi nunca necesitarás usar, debido al soporte de PowerShell para la sintaxis de variables Get-Content
y Set-Content
, que acorta eso a:
PS > $env:UsernameLee
Esta sintaxis funciona para todas las unidades, pero se utiliza más comúnmente para acceder a las variables de entorno. Para obtener más información sobre esta sintaxis, consulte Acceder a información sobre la invocación de su comando.
Algunas variables de entorno obtienen realmente sus valores de una combinación de dos lugares: la configuración de toda la máquina y la configuración del usuario actual. Si desea acceder a los valores de las variables de entorno configuradas específicamente a nivel de máquina o de usuario, utilice el método ::GetEnvironmentVariable()
. Por ejemplo, si has definido un directorio de herramientas en tu ruta, podrías ver:
PS > ::GetEnvironmentVariable("Path", "User")d:\lee\tools
Para establecer estas variables de entorno específicas de la máquina o del usuario de forma permanente, utiliza el método ::SetEnvironmentVariable()
:
::SetEnvironmentVariable(<name>, <value>, <target>
)
El parámetro target
define dónde debe almacenarse esta variable: User
para el usuario actual y Machine
para todos los usuarios de la máquina. Por ejemplo, para añadir permanentemente el directorio de herramientas a la ruta:
$pathElements = @(::GetEnvironmentVariable("Path", "User") -split ";")$pathElements += "d:\tools"$newPath = $pathElements -join ";"::SetEnvironmentVariable("Path", $newPath, "User")
Para obtener más información sobre la modificación de la ruta del sistema, consulte Modificar la ruta del usuario o del sistema.
Para obtener más información sobre la sintaxis de las variables Get-Content
y Set-Content
, consulte Variables. Para obtener más información sobre el proveedor de entorno, escriba Get-Help About_Environment
.