Articles

Acerca de las variables de entorno

  • 09/22/2020
  • 8 minutos de lectura
  • .

    • S
    • r
    • s
    • d
    • c
    • +1

CORTA DESCRIPCIÓN

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

DESCRIPCIÓN LARGA

Las variables de entorno almacenan información sobre el entorno del sistema operativo. Esta información incluye detalles como la ruta del sistema operativo, el número de procesadores utilizados por el sistema operativo y la ubicación de las carpetas temporales.

Las variables de entorno almacenan datos que son utilizados por el sistema operativo y otros programas. Por ejemplo, la variable de entorno WINDIR contiene la ubicación del directorio de instalación de Windows. Los programas pueden consultar el valor de esta variable para determinar dónde se encuentran los archivos del sistema operativo Windows.

PowerShell puede acceder y gestionar las variables de entorno en cualquiera de las plataformas de sistemas operativos compatibles. El proveedor de entorno de PowerShell simplifica este proceso facilitando la visualización y el cambio de las variables de entorno.

Las variables de entorno, a diferencia de otros tipos de variables en PowerShell, son heredadas por los procesos hijos, como los trabajos de fondo locales y las sesiones en las que se ejecutan los miembros del módulo. Esto hace que las variables de entorno sean muy adecuadas para almacenar valores que se necesitan tanto en los procesos padre como en los hijos.

Uso y cambio de variables de entorno

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

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

El ámbito del 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 padre y se construye a partir de las variables de los ámbitos Machine yUser. Las plataformas basadas en Unix sólo tienen el ámbito Process.

Puede mostrar y cambiar los valores de las variables de entorno sin usar acmdlet utilizando una sintaxis de variable con el proveedor de entorno. Para mostrar el valor de una variable de entorno, utilice la siguiente sintaxis:

$Env:<variable-name>

Por ejemplo, para mostrar el valor de la variable de entorno WINDIR, escriba el siguiente comando en el símbolo del sistema de PowerShell:

$Env:windir

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

Cuando se cambian las variables de entorno en PowerShell, el cambio afecta sólo a la sesión actual. Este comportamiento se asemeja al del comando Set en la Shell de comandos de Windows y el comando Setenv en entornos basados en UNIX. Para cambiar los valores en los ámbitos Máquina o Usuario, debe utilizar los métodos de la clase System.Environment.

Para realizar cambios en las variables de ámbito Máquina, también debe tener permiso. Si intenta cambiar un valor sin el permiso suficiente, el comando falla yPowerShell muestra un error.

Puede cambiar los valores de las variables sin utilizar un cmdlet utilizando la siguiente sintaxis:

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

Por ejemplo, para añadir ;c:\temp al valor de la variable de entorno Path, utilice la siguiente sintaxis:

$Env:Path += ";c:\temp"

En Linux o macOS, los dos puntos (:) en el comando separan la nueva ruta de la que la precede en la lista.

$Env:PATH += ":/usr/local/temp"

También puede utilizar los cmdlets Item, como Set-ItemRemove-Item, yCopy-Item para cambiar los valores de las variables de entorno. Por ejemplo, para utilizar el cmdlet Set-Item para añadir ;c:\temp al valor de la variable de entorno Path, utilice la siguiente sintaxis:

Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

En este comando, el valor se encierra entre paréntesis para que seinterprete como una unidad.

Variables de entorno que almacenan preferencias

Las funciones de PowerShell pueden utilizar variables de entorno para almacenar las preferencias del usuario.Estas variables funcionan como las variables de preferencia, pero son heredadas por las sesiones hijas 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 preferencias incluyen:

  • PSExecutionPolicyPreference

    Almacena la política de ejecución establecida para la sesión actual. Esta environmentvariable sólo existe cuando se establece una política de ejecución para una sola sesión.Puede hacerlo de dos maneras diferentes.

    • Iniciar una sesión desde la línea de comandos utilizando el parámetro ExecutionPolicy para establecer la política de ejecución para la sesión.

    • Utilizar el cmdlet Set-ExecutionPolicy. Utilice el parámetro Scope conun valor de «Process».

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

  • PSModuleAnalysisCachePath

    PowerShell proporciona control sobre el archivo que se utiliza para almacenar en caché los datos sobre los módulos y sus cmdlets. La caché se lee al inicio mientras se busca un comando y se escribe en un hilo de fondo en algún momento después de importar un módulo.

    La ubicación predeterminada de la caché es:

    • Windows PowerShell 5.1: $env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 y superior: $env:LOCALAPPDATA\Microsoft\PowerShell
    • PowerShell 6.0 y superior: ~/.cache/powershell
    • El nombre de archivo por defecto para la caché es ModuleAnalysisCache. Si tiene varias instancias de PowerShell instaladas, el nombre de archivo incluye un sufijo hexadecimal para que haya un nombre de archivo único por instalación.

      Nota

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

      Para cambiar la ubicación predeterminada de la caché, establezca la variable de entornoantes de iniciar PowerShell. Los cambios en esta variable de entorno sólo afectan a los procesos infantiles. El valor debe nombrar una ruta completa (incluyendo el nombre del archivo)que PowerShell tenga permiso para crear y escribir archivos.

      Para desactivar la caché de archivos, establezca este valor en una ubicación no válida, por ejemplo:

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

      Esto establece la ruta en el dispositivo NUL. PowerShell no puede escribir en la ruta pero no se devuelve ningún error. Puedes ver los errores reportados usando el atracer:

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

      PSDisableModuleAnalysisCacheCleanup

      Cuando se escribe la caché de análisis de módulos, PowerShell comprueba los 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 el valor de esta variable de entorno a 1.

      El establecimiento de esta variable de entorno tiene efecto inmediato en el proceso actual.

    • PSModulePath

      La variable de entorno $env:PSModulePath contiene una lista de ubicaciones de carpetas que se buscan para encontrar módulos y recursos.

      Por defecto, las ubicaciones efectivas asignadas a $env:PSModulePath son:

    • Localizaciones de todo el sistema: Estas carpetas contienen los módulos que se envían conPowerShell. Los módulos se almacenan en la ubicación $PSHOME\Modules. Además,Esta es la ubicación donde se instalan los módulos de gestión de Windows.

    • Módulos instalados por el usuario: Son módulos instalados por el usuario.Install-Module tiene un parámetro Scope que permite especificarsi el módulo se instala para el usuario actual o para todos los usuarios. Para más información, consulte Install-Module.

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

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

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

      Gestión de variables de entorno

      PowerShell proporciona varios métodos diferentes para la gestión de environmentvariables.

      • La unidad Environment provider
      • Los cmdlets Item
      • La clase .NET System.Environment class
      • En Windows, el Panel de Control del Sistema

      Usando el proveedor de Entorno

      Cada variable de entorno está representada por una instancia de la claseSystem.Collections.DictionaryEntry. En cada objeto DictionaryEntry, el nombre de la variable de entorno es la clave del diccionario. El valor de la variable es el valor del diccionario.

      Para mostrar las propiedades y los métodos del objeto que representa una variable de entorno en PowerShell, utilice el cmdlet Get-Member. Por ejemplo, para mostrar los métodos y las propiedades de todos los objetos de la unidad Env:, escriba:

      Get-Item -Path Env:* | Get-Member

      El proveedor de entorno de PowerShell le permite acceder a las variables de entorno de una unidad dePowerShell (la unidad Env:). Esta unidad se parece mucho a una unidad de sistema de archivos. Para ir a la unidad Env:, escriba:

      Set-Location Env:

      Utilice los cmdlets de contenido para obtener o establecer los valores de una variable de entorno.

      PS Env:\> Set-Content -Path Test -Value 'Test value'PS Env:\> Get-Content -Path TestTest value

      Puede ver las variables de entorno en la unidad Env: desde cualquier otra unidad dePowerShell, y puede entrar en la unidad Env: para ver y cambiar las variables de entorno.

      Uso de los cmdlets de elementos

      Cuando haga referencia a una variable de entorno, escriba el Env: nombre de la unidad seguido del nombre de la variable. Por ejemplo, para mostrar el valor de la variable de entorno COMPUTERNAME, escriba:

      Get-ChildItem Env:Computername

      Para mostrar los valores de todas las variables de entorno, escriba:

      Get-ChildItem Env:

      Debido a que las variables de entorno no tienen elementos hijos, la salida de Get-Itemy Get-ChildItem es la misma.

      Por defecto, PowerShell muestra las variables de entorno en el orden en que las recupera. Para ordenar la lista de variables de entorno por nombre de variable, canalice la salida de un comando Get-ChildItem al cmdlet Sort-Object. Forexample, desde cualquier unidad de PowerShell, escribe:

      Get-ChildItem Env: | Sort Name

      También puedes entrar en la unidad Env: utilizando el cmdlet Set-Location:

      Set-Location Env:

      Cuando estés en la unidad Env:, puedes omitir el Env: nombre de la unidad en la ruta. Por ejemplo, para mostrar todas las variables de entorno, escriba:

      PS Env:\> Get-ChildItem

      Para mostrar el valor de la variable COMPUTERNAME dentro de la Env:unidad, escriba:

      PS Env:\> Get-ChildItem ComputerName

      Guardar cambios en las variables de entorno

      Para realizar un cambio persistente en una variable de entorno en Windows, utilice elPanel de control del sistema. Seleccione Configuración avanzada del sistema. En la pestaña Avanzado, haga clic en Variable de entorno…. Puede añadir o editar variables de entorno existentes en los ámbitos de Usuario y Sistema (Máquina). Windows escribe estos valores en el Registro para que persistan a través de las sesiones y los reinicios del sistema.

      Alternativamente, puede añadir o cambiar las variables de entorno en su perfil de PowerShell. Este método funciona para cualquier versión de PowerShell en cualquier plataforma soportada.

      Uso de los métodos System.Environment

      La clase System.Environment proporciona los métodos GetEnvironmentVariable y SetEnvironmentVariable que permiten especificar el ámbito de la variable.

      El siguiente ejemplo utiliza el método GetEnvironmentVariable para obtener la configuración de la máquina de PSModulePath y el método SetEnvironmentVariablepara añadir la ruta C:\Program Files\Fabrikam\Modules al valor.

      $path = ::GetEnvironmentVariable('PSModulePath', 'Machine')$newpath = $path + ';C:\Program Files\Fabrikam\Modules'::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')

      Para más información sobre los métodos de la clase System.Environment, consulteMétodosEnvironment.

      SEE ALSO

      • Environment (provider)
      • about_Modules

      .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *