about_Environment_Variables

Descripción breve

Describe cómo acceder a las variables de entorno y administrarlas en PowerShell.

Las variables de entorno almacenan los datos que usa el sistema operativo y otros programas. PowerShell crea las siguientes variables de entorno:

  • POWERSHELL_TELEMETRY_OPTOUT
  • POWERSHELL_DISTRIBUTION_CHANNEL
  • POWERSHELL_UPDATECHECK
  • PSExecutionPolicyPreference
  • PSModulePath
  • PSModuleAnalysisCachePath
  • PSDisableModuleAnalysisCacheCleanup

Para obtener descripciones completas de estas variables, consulte las variables de entorno de PowerShell de este artículo.

Descripción larga

PowerShell puede acceder a las variables de entorno y administrarlas en cualquiera de las plataformas de sistema operativo compatibles. El proveedor de entornos de PowerShell le permite obtener, agregar, cambiar, borrar y eliminar variables de entorno en la consola actual.

Nota:

A diferencia de Windows, los nombres de variables de entorno en macOS y Linux distinguen mayúsculas de minúsculas. Por ejemplo, $env:Path y $env:PATH son variables de entorno diferentes en plataformas que no son windows.

Las variables de entorno, a diferencia de otros tipos de variables en PowerShell, siempre se almacenan como cadenas. Además, a diferencia de otras variables, los procesos secundarios heredan, como los trabajos en segundo plano locales y las sesiones en las que se ejecutan los miembros del módulo. Esto hace que las variables de entorno sean adecuadas para almacenar valores necesarios en los procesos primarios y secundarios.

En Windows, las variables de entorno se pueden definir en tres ámbitos:

  • Ámbito de máquina (o sistema)
  • Ámbito de usuario
  • Ámbito de proceso

El ámbito Proceso contiene las variables de entorno disponibles en el proceso actual o en la sesión de PowerShell. Esta lista de variables se hereda del proceso primario y se construye a partir de las variables en los ámbitos de máquina y usuario .

Al cambiar las variables de entorno en PowerShell, el cambio afecta solo a la sesión actual. Este comportamiento es similar al comportamiento del set comando en el Shell de comandos de Windows y el setenv comando en entornos basados en UNIX. Para cambiar los valores en los ámbitos De máquina o usuario, debe usar los métodos de la clase System.Environment .

Para realizar cambios en variables con ámbito de máquina, también debe tener permiso. Si intenta cambiar un valor sin permiso suficiente, se produce un error en el comando y PowerShell muestra un error.

PowerShell proporciona varios métodos diferentes para usar y administrar variables de entorno.

  • Sintaxis de variable
  • El proveedor de entorno y los cmdlets Item
  • La clase System.Environment de .NET

Uso de la sintaxis de variable

Puede mostrar y cambiar los valores de las variables de entorno con la sintaxis siguiente:

$Env:<variable-name>

Por ejemplo, para mostrar el valor de la WINDIR variable de entorno:

$Env:windir
C:\Windows

En esta sintaxis, el signo de dólar ($) indica una variable y el nombre de unidad (Env:) indica una variable de entorno seguida del nombre de la variable (windir).

Puede crear y actualizar el valor de las variables de entorno con la sintaxis siguiente:

$Env:<variable-name> = "<new-value>"

Por ejemplo, para crear la variable de Foo entorno:

$Env:Foo = 'An example'

Dado que las variables de entorno siempre son cadenas, puede usarlas como cualquier otra variable que contenga una cadena. Por ejemplo:

"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example

An example!

En PowerShell, una variable de entorno no se puede establecer en una cadena vacía. Si se establece una variable de entorno en $null o una cadena vacía, se quita de la sesión actual. Por ejemplo:

$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+            ~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationException
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand

Get-Member devolvió un error porque se quitó la variable de entorno. Puede ver que no devuelve un error cuando se usa en una cadena vacía:

'' | Get-Member -MemberType Properties
   TypeName: System.String

Name   MemberType Definition
----   ---------- ----------
Length Property   int Length {get;}

Para obtener más información sobre las variables en PowerShell, consulte about_Variables.

Uso del proveedor de entorno y los cmdlets Item

El proveedor de entornos de PowerShell proporciona una interfaz para interactuar con variables de entorno en un formato similar a una unidad del sistema de archivos. Permite obtener, agregar, cambiar, borrar y eliminar variables de entorno y valores en PowerShell.

Por ejemplo, para crear la Foo variable de entorno con un valor de Bar:

New-Item -Path Env:\Foo -Value 'Bar'
Name                           Value
----                           -----
Foo                            Bar

También puede copiar la variable de entorno con Copy-Item, establecer el valor de una variable de entorno con Set-Item, enumerar variables de entorno con Get-Itemy eliminar la variable de entorno con Remove-Item.

Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name                           Value
----                           -----
Foo2                           Bar

Name                           Value
----                           -----
Foo2                           BAR
Foo                            Bar

VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".

Use el Get-ChildItem cmdlet para ver una lista completa de variables de entorno:

Get-ChildItem Env:

Para obtener más información sobre el uso del proveedor de entorno para administrar variables de entorno, consulte about_Environment_Provider.

Uso de los métodos System.Environment

La clase System.Environment proporciona los métodos GetEnvironmentVariable y SetEnvironmentVariable para obtener y modificar variables de entorno.

En el ejemplo siguiente se crea una nueva variable de entorno, Foo, con un valor de Bar y, a continuación, se devuelve su valor.

[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar

Puede quitar una variable de entorno con el método SetEnvironmentVariable especificando una cadena vacía para el valor de la variable. Por ejemplo, para quitar la variable de Foo entorno:

[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')

Para obtener más información sobre los métodos de la clase System.Environment , vea Métodos de entorno.

Guardar cambios en variables de entorno

En Windows, hay tres métodos para realizar un cambio persistente en una variable de entorno: establecerlos en el perfil, usar el método SetEnvironmentVariable y usar system Panel de control.

Guardar variables de entorno en el perfil

Cualquier variable de entorno que agregue o cambie en el perfil de PowerShell está disponible en cualquier sesión que cargue el perfil. Este método funciona para cualquier versión de PowerShell en cualquier plataforma compatible.

Por ejemplo, para crear la variable de CompanyUri entorno y actualizar la Path variable de entorno para incluir la C:\Tools carpeta, agregue las líneas siguientes al perfil de PowerShell:

$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'

Nota:

En Linux o macOS, se usan los dos puntos (:) en lugar de un punto y coma(;) para separar una nueva ruta de acceso de la ruta de acceso que la precede en la lista.

Puede obtener la ruta de acceso al perfil de PowerShell con la $PROFILE variable automática. Para obtener más información sobre los perfiles, consulte about_Profiles.

Guardar variables de entorno con SetEnvironmentVariable

En Windows, puede especificar un ámbito para el método SetEnvironmentVariable como tercer parámetro para establecer la variable de entorno en ese ámbito. Los ámbitos de máquina y usuario persisten fuera del proceso actual, lo que le permite guardar una variable de entorno nueva o modificada.

Por ejemplo, para guardar una nueva variable Foo de entorno con el valor Baren el ámbito de la máquina:

[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')

Puede eliminar una variable de entorno del ámbito de usuario o máquina estableciendo el valor de la variable en una cadena vacía.

[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')

Guardar variables de entorno con System Panel de control

En el sistema Panel de control, puede agregar o editar variables de entorno existentes en los ámbitos usuario y sistema (máquina). Windows escribe estos valores en el Registro para que persistan entre sesiones y reinicios del sistema.

Para realizar un cambio persistente en una variable de entorno en Windows mediante system Panel de control:

  1. Abra el Panel de control del sistema.
  2. Seleccione Sistema.
  3. Seleccione Sistema avanzado Configuración.
  4. Vaya a la pestaña Avanzadas .
  5. Seleccione Variables de entorno....
  6. Haga los cambios que desee.

Variables de entorno de PowerShell

Las características de PowerShell pueden usar variables de entorno para almacenar preferencias de usuario. Estas variables funcionan como variables de preferencia, pero son heredadas por sesiones secundarias de las sesiones en las que se crean. Para obtener más información sobre las variables de preferencia, consulte about_Preference_Variables.

Las variables de entorno que almacenan las preferencias incluyen:

  • POWERSHELL_TELEMETRY_OPTOUT

    Para no participar en la telemetría, establezca la variable truede entorno en , yeso 1.

    Para obtener más información, consulte about_Telemetry.

  • POWERSHELL_DISTRIBUTION_CHANNEL

    A partir de PowerShell 7.2, los paquetes del instalador establecen esta variable de entorno para registrar el método y el origen de la instalación de PowerShell.

    Esta información se incluye en los datos de telemetría enviados a Microsoft. Los usuarios no deben cambiar este valor.

  • POWERSHELL_UPDATECHECK

    El comportamiento de las notificaciones de actualización se puede cambiar mediante la variable de entorno POWERSHELL_UPDATECHECK. Se admiten los valores siguientes:

    • Off desactiva la característica de notificación de actualización
    • Default es lo mismo que no definir POWERSHELL_UPDATECHECK:
      • Las versiones de disponibilidad general notifican las actualizaciones de dichas versiones
      • Las versiones preliminares y RC notifican las actualizaciones de GA y las versiones de versión preliminar
    • LTS solo notifica las actualizaciones a las versiones de disponibilidad general de mantenimiento a largo plazo (LTS)

    Para obtener más información, consulte about_Update_Notifications.

  • PSExecutionPolicyPreference

    Almacena la directiva de ejecución establecida para la sesión actual. Esta variable de entorno solo existe cuando se establece una directiva de ejecución para una sola sesión. Puede hacerlo de dos maneras diferentes.

    • Inicie una sesión desde la línea de comandos mediante el parámetro ExecutionPolicy para establecer la directiva de ejecución de la sesión.

    • Utilice el cmdlet Set-ExecutionPolicy. Use el parámetro Scope con un valor de Process.

      Para obtener más información, vea about_Execution_Policies.

  • PSModulePath

    La $env:PSModulePath variable de entorno contiene una lista de ubicaciones de carpetas que se buscan para buscar módulos y recursos. En Windows, la lista de ubicaciones de carpetas está separada por el carácter de punto y coma (;). En plataformas que no son de Windows, los dos puntos (:) separan las ubicaciones de carpetas en la variable de entorno.

    De forma predeterminada, las ubicaciones efectivas asignadas a $env:PSModulePath son:

    • Ubicaciones para todo el sistema: estas carpetas contienen módulos que se incluyen con PowerShell. Los módulos se almacenan en la $PSHOME\Modules ubicación. Además, esta es la ubicación donde se instalan los módulos de administración de Windows.

    • Módulos instalados por el usuario: estos son módulos instalados por el usuario. Install-Module tiene un parámetro Scope que permite especificar si el módulo está instalado para el usuario actual o para todos los usuarios. Para obtener más información, vea Install-Module.

      • En Windows, la ubicación del ámbito CurrentUser específico del usuario es la $HOME\Documents\PowerShell\Modules carpeta . La ubicación del ámbito AllUsers es $env:ProgramFiles\PowerShell\Modules.
      • En sistemas que no son Windows, la ubicación del ámbito CurrentUser específico del usuario es la $HOME/.local/share/powershell/Modules carpeta . La ubicación del ámbito AllUsers es /usr/local/share/powershell/Modules.

    Además, los programas de instalación que instalan módulos en otros directorios, como el directorio Archivos de programa, pueden anexar sus ubicaciones al valor de $env:PSModulePath.

    Para más información, consulte about_PSModulePath.

  • PSModuleAnalysisCachePath

    PowerShell proporciona control sobre el archivo que se usa para almacenar en caché los datos sobre los módulos y sus cmdlets. La memoria caché se lee en el inicio mientras busca un comando y se escribe en un subproceso en segundo plano alguna vez después de importar un módulo.

    La ubicación predeterminada de la memoria caché es:

    • Windows PowerShell 5.1: $env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 y versiones posteriores: $env:LOCALAPPDATA\Microsoft\PowerShell
    • Valor predeterminado que no es windows: ~/.cache/powershell

    El nombre de archivo predeterminado de la memoria caché es ModuleAnalysisCache. Cuando tiene instaladas varias instancias de PowerShell, el nombre de archivo incluye un sufijo hexadecimal para que haya un nombre de archivo único por instalación.

    Nota:

    Si la detección de comandos no funciona correctamente, por ejemplo, IntelliSense muestra comandos que no existen, puede eliminar el archivo de caché. La memoria caché se vuelve a crear la próxima vez que inicie PowerShell.

    Para cambiar la ubicación predeterminada de la memoria caché, establezca la variable de entorno antes de iniciar PowerShell. Los cambios en esta variable de entorno solo afectan a los procesos secundarios. El valor debe asignar un nombre a una ruta de acceso completa (nombre de archivo incluido) en la que PowerShell tiene permiso para crear y escribir archivos.

    Para deshabilitar la caché del archivo, establezca este valor en una ubicación no válida, como por ejemplo:

    # `NUL` here is a special device on Windows that can't be written to,
    # on non-Windows you would use `/dev/null`
    $env:PSModuleAnalysisCachePath = 'NUL'
    

    Esto establece la ruta de acceso al dispositivo NUL . PowerShell no puede escribir en la ruta de acceso, pero no se devuelve ningún error. Puede ver los errores notificados mediante un seguimiento:

    Trace-Command -PSHost -Name Modules -Expression {
      Import-Module Microsoft.PowerShell.Management -Force
    }
    
  • PSDisableModuleAnalysisCacheCleanup

    Al escribir la caché de análisis de módulos, PowerShell comprueba si hay módulos que ya no existen para evitar una caché innecesariamente grande. A veces, estas comprobaciones no son deseables, en cuyo caso puede desactivarlas estableciendo este valor 1de variable de entorno en .

    Establecer esta variable de entorno surte efecto inmediatamente en el proceso actual.

Otras variables de entorno usadas por PowerShell

Información de ruta de acceso

  • PATH

    La $env:PATH variable de entorno contiene una lista de ubicaciones de carpetas en las que el sistema operativo busca archivos ejecutables. En Windows, la lista de ubicaciones de carpetas está separada por el carácter de punto y coma (;). En plataformas que no son de Windows, los dos puntos (:) separan las ubicaciones de carpetas en la variable de entorno.

  • PATHEXT

    La $env:PATHEXT variable contiene una lista de extensiones de archivo que Windows considera como archivos ejecutables. Cuando se ejecuta un archivo de script con una de las extensiones enumeradas desde PowerShell, el script se ejecuta en la sesión de terminal o consola actual. Si la extensión de archivo no aparece en la lista, el script se ejecuta en una nueva sesión de consola.

    Para asegurarse de que los scripts para otro lenguaje de scripting se ejecuten en la sesión de consola actual, agregue la extensión de archivo que usa el lenguaje de scripting. Por ejemplo, para ejecutar scripts de Python en la consola actual, agregue la .py extensión a la variable de entorno. Para que Windows admita la .py extensión como un archivo ejecutable, debe registrar la extensión de archivo mediante los ftype comandos y assoc del shell de comandos de CMD. PowerShell no tiene ningún método directo para registrar el controlador de archivos. Para obtener más información, consulte la documentación del comando ftype .

    Los scripts de PowerShell siempre se inician en la sesión de consola actual. No es necesario agregar la .PS1 extensión.

  • Variables XDG

    En plataformas que no son de Windows, PowerShell usa las siguientes variables de entorno XDG, tal como se define en la especificación de directorio base de XDG.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

Características de terminal

A partir de PowerShell 7.2, se pueden usar las siguientes variables de entorno para controlar las características del terminal virtual, como las secuencias de escape ANSI que colorean la salida. La compatibilidad con secuencias de escape ANSI se puede desactivar mediante las variables de entorno TERM y NO_COLOR.

  • TÉRMINO

    Los siguientes valores de $env:TERM modifican el comportamiento de la manera siguiente:

    • dumb -Establece $Host.UI.SupportsVirtualTerminal = $false
    • xterm-mono -Establece $PSStyle.OutputRendering = PlainText
    • xtermm -Establece $PSStyle.OutputRendering = PlainText
  • NO_COLOR

    Si $env:NO_COLOR existe, se establece en $PSStyle.OutputRendering PlainText. Para obtener más información sobre la variable de entorno NO_COLOR , vea https://no-color.org/.

Consulte también