Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Descripción breve
En este artículo se describe el propósito y el uso de la $Env:PSModulePath variable de entorno.
Descripción larga
La $Env:PSModulePath variable de entorno contiene una lista de ubicaciones de carpetas. PowerShell busca recursivamente cada carpeta para los archivos de módulo (.psd1 o .psm1).
De forma predeterminada, las ubicaciones efectivas asignadas a $Env:PSModulePath son:
- Los módulos instalados en el ámbito CurrentUser se almacenan en
$HOME\Documents\WindowsPowerShell\Modules. - Los módulos instalados en el ámbito AllUsers se almacenan en
$Env:ProgramFiles\WindowsPowerShell\Modules. - Módulos que se incluyen con Windows PowerShell almacenados en
$PSHOME\Modules, que es$Env:SystemRoot\System32\WindowsPowerShell\1.0\Modules.
Construcción de PSModulePath de PowerShell
El valor de $Env:PSModulePath se construye cada vez que se inicia PowerShell.
El valor varía según la versión de PowerShell y cómo la ha iniciado.
Inicio de Windows PowerShell
Windows PowerShell usa la siguiente lógica para construir el PSModulePath objeto en el inicio:
- Si
PSModulePathno existe, combine . - Si
PSModulePathexiste:- Si
PSModulePathcontiene$PSHOMEla ruta de acceso de los módulos:-
La ruta de acceso de los módulos AllUsers se inserta antes de
$PSHOMEla ruta de acceso de los módulos
-
La ruta de acceso de los módulos AllUsers se inserta antes de
- más:
- Solo tiene que usar
PSModulePathcomo se define, ya que el usuario quitó deliberadamente la$PSHOMEubicación
- Solo tiene que usar
- Si
La ruta de acceso del módulo CurrentUser solo tiene el prefijo si el ámbito $Env:PSModulePath de usuario no existe. De lo contrario, el ámbito $Env:PSModulePath de usuario se usa como se define.
Comportamiento de búsqueda de módulos
PowerShell busca recursivamente cada carpeta en los archivos PSModulePath para los archivos de módulo (.psd1 o .psm1). Este patrón de búsqueda permite instalar varias versiones del mismo módulo en carpetas diferentes. Por ejemplo:
Directory: C:\Program Files\WindowsPowerShell\Modules\PowerShellGet
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 8/14/2020 5:56 PM 1.0.0.1
d---- 9/13/2019 3:53 PM 2.1.2
De forma predeterminada, PowerShell carga el número de versión más alto de un módulo cuando se encuentran varias versiones. Para cargar una versión específica, use Import-Module con el parámetro FullyQualifiedName . Para obtener más información, consulte Import-Module.
Modificación de PSModulePath
En la mayoría de las situaciones, debe instalar módulos en las ubicaciones predeterminadas del módulo. Sin embargo, es posible que tenga que cambiar el valor de la PSModulePath variable de entorno.
Por ejemplo, para agregar temporalmente el C:\Program Files\Fabrikam\Modules directorio a $Env:PSModulePath para la sesión actual, escriba:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
Para cambiar el valor de PSModulePath en cada sesión, edite la clave del Registro que almacena los PSModulePath valores. Los PSModulePath valores se almacenan en el Registro como cadenas no expandidas . Para evitar guardar permanentemente los PSModulePath valores como cadenas expandidas , use el GetValue() método en la subclave y edite el valor directamente.
En el ejemplo siguiente se agrega la C:\Program Files\Fabrikam\Modules ruta de acceso al valor de la PSModulePath variable de entorno sin expandir las cadenas no expandidas.
$key = (Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
Para agregar una ruta de acceso a la configuración del usuario, use el código siguiente:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)