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
Explica cómo instalar, importar y usar módulos de PowerShell.
Descripción larga
PowerShell es un lenguaje de scripting y un shell de comandos. El lenguaje se compone de palabras clave, que proporcionan la estructura y la lógica del procesamiento, y comandos que realizan el trabajo. Los comandos de PowerShell se implementan como scripts, funciones o cmdlets.
Un módulo es una unidad reutilizable independiente que puede contener cmdlets, proveedores, funciones, variables y otros tipos de recursos que se pueden importar como una sola unidad.
PowerShell viene con un conjunto básico de módulos. También puede instalar más módulos según sea necesario. De forma predeterminada, los módulos instalados se cargan automáticamente la primera vez que se utiliza un comando de un módulo. Utilice la variable para activar, desactivar y configurar la $PSModuleAutoloadingPreference carga automática de módulos. Para obtener más información, consulte about_Preference_Variables.
Puede descargar o volver a cargar durante una sesión. Use el Remove-Module cmdlet para descargar un módulo de la sesión. Use el Import-Module cmdlet para cargar un módulo.
Los módulos se pueden crear como ensamblados de .NET compilados escritos en C# o módulos basados en scripts escritos en PowerShell. En este tema se explica cómo usar módulos de PowerShell. Para obtener información sobre cómo escribir módulos de PowerShell, consulte Escribir un módulo de PowerShell.
Nota:
Antes de PowerShell 3.0, los cmdlets y los proveedores se empaquetaban en complementos de PowerShell. A partir de PowerShell 3.0, el complemento Microsoft.PowerShell.Core se agrega a cada sesión de forma predeterminada. Este es el único snap-in que queda en PowerShell. Todos los demás snap-ins se han convertido en módulos. La creación de nuevos snap-ins ya no está soportada.
Instalación de un módulo publicado
Un módulo publicado es un módulo que está disponible en un repositorio registrado, como la Galería de PowerShell. Los módulos de PowerShellGet y Microsoft.PowerShell.PSResourceGet proporcionan cmdlets para buscar, instalar y publicar módulos de PowerShell en un repositorio registrado.
El módulo PowerShellGet se incluye con PowerShell 5.0 y versiones posteriores. El módulo Microsoft.PowerShell.PSResourceGet se incluye con PowerShell 7.4 y versiones posteriores.
Microsoft.PowerShell.PSResourceGet es el nuevo administrador de paquetes preferido para PowerShell y se puede instalar en versiones anteriores de PowerShell. Use el cmdlet Install-Module o Install-PSResource para instalar módulos desde la Galería de PowerShell.
Get-Command Install-Module, Install-PSResource
CommandType Name Version Source
----------- ---- ------- ------
Function Install-Module 2.9.0 PowerShellGet
Cmdlet Install-PSResource 1.0.0 Microsoft.PowerShell.PSResourceGet
Para obtener más información, consulte PowerShellGet Overview.
Instalación manual de un módulo
Si recibe un módulo como una carpeta con archivos, debe instalarlo en su computadora antes de poder usarlo en PowerShell.
PowerShell viene con varios módulos preinstalados. En los equipos basados en Windows, muchas características de Windows incluyen módulos para administrar la característica. Esos módulos se instalan cuando se instala la función. Otros módulos pueden venir en un instalador o programa de instalación que instala el módulo.
De forma predeterminada, la carpeta Modules para el usuario actual no existe. Si instaló un módulo en el ámbito CurrentUser utilizando Install-Module o Install-PSResource, esos cmdlets crean la carpeta Modules para el usuario actual. Si la carpeta no existe, puede crearla manualmente.
Use el siguiente comando para crear una carpeta Modules para el usuario actual:
$folder = New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules
Copie toda la carpeta del módulo en la nueva carpeta creada. En PowerShell, use el cmdlet Copy-Item. Por ejemplo, ejecute el siguiente comando para copiar la MyModule carpeta en la carpeta que acaba de C:\PSTest crear:
Copy-Item -Path C:\PSTest\MyModule -Destination $folder
Puede instalar un módulo en cualquier ubicación, pero instalar los módulos en una ubicación de módulo predeterminada facilita su administración. Para obtener más información sobre las ubicaciones de módulo predeterminadas, consulte about_PSModulePath.
Carga automática de módulos
La primera vez que ejecute un comando desde un módulo instalado, PowerShell importa (carga) automáticamente ese módulo. El módulo debe almacenarse en las ubicaciones especificadas en la variable de entorno $env:PSModulePath. Los módulos de otras ubicaciones deben importarse mediante el Import-Module cmdlet.
La carga automática de módulos permite usar comandos en un módulo sin ninguna configuración de configuración o perfil. No es necesario administrar módulos después de instalarlos en su computadora.
Cada uno de los ejemplos siguientes hace que el módulo CimCmdlets , que contiene Get-CimInstance, se importe en la sesión.
Ejecutar el comando
Get-CimInstance Win32_OperatingSystemObtener el comando
Get-Command Get-CimInstanceObtener ayuda para el comando
Get-Help Get-CimInstance
Puede usar la Get-Command lista de cmdlets de todos los comandos de todos los módulos instalados, incluso si aún no están en la sesión. Cuando se usa Get-Command con un carácter comodín (*), PowerShell no importa ningún módulo. Puede usar comodines para la detección de comandos sin cargar módulos que no necesite en la sesión.
Además, los comandos que usan proveedores de PowerShell no importan automáticamente un módulo. Por ejemplo, si usa un comando que requiere la unidad WSMan:, como el cmdlet Get-PSSessionConfiguration, es posible que tenga que ejecutar el cmdlet Import-Module para importar el módulo Microsoft.WSMan.Management que incluye la unidad WSMan:.
Importación manual de un módulo
La importación manual de un módulo es necesaria cuando un módulo no está instalado en las ubicaciones especificadas por la variable de entorno de $env:PSModulePath, o cuando el módulo se proporciona como un archivo independiente de .dll o .psm1, en lugar de un módulo empaquetado.
Es posible que también desee cambiar cómo se importa el módulo en la sesión. Por ejemplo, el parámetro Prefijo de Import-Module añade un prefijo distintivo a la parte del nombre de los cmdlets importados del módulo. El parámetro NoClobber impide que el módulo agregue comandos que ocultarían o reemplazarían los comandos existentes en la sesión. Para obtener más información, vea Administrar conflictos de nombres.
Puede importar un módulo que esté instalado en su $env:PSModulePath especificando el nombre del módulo. Por ejemplo, el siguiente comando importa el módulo BitsTransfer a la sesión actual.
Import-Module BitsTransfer
Para importar un módulo que no se encuentra en su $env:PSModulePath, utilice la ruta completa a la carpeta del módulo. Por ejemplo, para agregar el módulo TestCmdlets en el directorio C:\ps-test a su sesión, escriba:
Import-Module C:\ps-test\TestCmdlets
Para importar un archivo de módulo que no está incluido en una carpeta de módulos, use la ruta de acceso completa al archivo de módulo en el comando . Por ejemplo, para agregar el módulo TestCmdlets.dll en el directorio C:\ps-test a la sesión, escriba:
Import-Module C:\ps-test\TestCmdlets.dll
Para obtener más información sobre cómo agregar módulos a la sesión, consulte Import-Module.
Importación de un módulo al principio de cada sesión
El comando Import-Module importa módulos en la sesión actual de PowerShell. Para importar un módulo en cada sesión de PowerShell que inicie, agregue el comando Import-Module al perfil de PowerShell.
Para obtener más información sobre los perfiles, vea about_Profiles.
Búsqueda de módulos instalados
El Get-Module cmdlet obtiene los módulos de PowerShell que se han importado en la sesión.
Get-Module
Los módulos enumerados pueden incluir módulos importados desde cualquier ubicación, no solo desde $env:PSModulePath.
Use el comando siguiente para enumerar los módulos instalados en el $env:PSModulePath:
Get-Module -ListAvailable
Este comando obtiene todos los módulos instalados en $env:PSModulePath, no solo los módulos que se importan en la sesión actual. Este comando no enumera los módulos instalados en otras ubicaciones.
Para obtener más información, consulte Get-Module.
Enumeración de los comandos de un módulo
Use el cmdlet Get-Command para buscar todos los comandos disponibles. Puede usar los parámetros del cmdlet Get-Command para filtrar comandos por módulo, nombre y sustantivo.
Para buscar todos los comandos de un módulo, escriba:
Get-Command -Module <module-name>
Por ejemplo, para buscar los comandos en el módulo BitsTransfer, escriba:
Get-Command -Module BitsTransfer
Para obtener más información sobre el cmdlet Get-Command, consulte Get-Command.
Eliminación de un módulo
Al quitar un módulo, los comandos que el módulo agregado se eliminan de la sesión. Por ejemplo, el siguiente comando quita el módulo BitsTransfer de la sesión actual.
Remove-Module BitsTransfer
Al quitar un módulo, se invierte el funcionamiento de la importación de un módulo. Quitar un módulo no desinstala el módulo. Para obtener más información, consulte Remove-Module.
Se pueden añadir comandos a la sesión desde módulos y complementos. Los módulos pueden agregar todo tipo de comandos, incluidos cmdlets, proveedores y funciones, y elementos, como variables, alias y unidades de PowerShell. Los complementos solo pueden agregar cmdlets y proveedores.
Antes de quitar un módulo de la sesión, use los siguientes comandos para determinar qué módulo desea quitar.
Por ejemplo, use el siguiente comando para buscar el origen de los cmdlets Get-Date y Get-Help:
Get-Command Get-Date, Get-Help -All |
Select-Object -Property Name, CommandType, Module ,PSSnapIn
La siguiente salida muestra que el cmdlet Get-Help se encuentra en el snap-in Microsoft.PowerShell.Core. Este complemento no se puede eliminar de la sesión.
Name CommandType Module PSSnapIn
---- ----------- ------ --------
Get-Date Function
Get-Date Cmdlet Microsoft.PowerShell.Utility
Get-Help Cmdlet Microsoft.PowerShell.Core
Existen dos fuentes para Get-Date. Una es una función y la otra es un cmdlet del módulo Microsoft.PowerShell.Utility. Puede quitar el módulo mediante Remove-Module. Para quitar la función, puede eliminarla de la unidad Function:.
Remove-Item Function:Get-Date
Para obtener más información sobre la unidad Function:, consulte about_Function_Provider.
Administrar conflictos de nombres
Los conflictos de nombres se producen cuando más de un comando de la sesión tiene el mismo nombre. La importación de un módulo produce un conflicto de nombres cuando los comandos del módulo tienen los mismos nombres que los comandos o elementos de la sesión.
Import-Module puede agregar comandos que ocultan y reemplazan comandos en la sesión actual. Los conflictos de nombres pueden dar lugar a que los comandos estén ocultos o reemplazados. El reemplazo de comandos se produce cuando el módulo importado contiene un comando con el mismo nombre que un comando existente en la sesión. El comando recién importado reemplaza tiene prioridad sobre el comando existente.
Por ejemplo, cuando una sesión incluye una función y un cmdlet con el mismo nombre, PowerShell ejecuta la función de forma predeterminada. Cuando la sesión incluye comandos del mismo tipo con el mismo nombre, como dos cmdlets con el mismo nombre, de forma predeterminada, ejecuta el comando agregado más recientemente.
Para obtener más información, incluida una explicación de las reglas de precedencia e instrucciones para ejecutar comandos ocultos, consulte about_Command_Precedence.
Puede ejecutar un comando que se haya ocultado o reemplazado calificando el nombre del comando. Para calificar el nombre del comando, agregue el nombre del módulo que contiene la versión del comando que desea. Por ejemplo:
Microsoft.PowerShell.Utility\Get-Date
La ejecución de Get-Date con el prefijo del nombre del módulo garantiza la ejecución de la versión del módulo Microsoft.PowerShell.Utility.
Para detectar conflictos de nombres, use el parámetro All del cmdlet Get-Command. De forma predeterminada, Get-Command obtiene solo los comandos que se ejecutan al escribir el nombre del comando. El parámetro All obtiene todos los comandos con el nombre específico de la sesión.
Para evitar conflictos de nombres, use los parámetros NoClobber o Prefix del cmdlet Import-Module. El parámetro Prefix agrega un prefijo a los nombres de los comandos importados para que sean únicos en la sesión. El parámetro noClobber no importa ningún comando que oculte ni reemplace los comandos existentes en la sesión.
Puede usar también el alias , el cmdlet , la función y los parámetros de variable de Import-Module para seleccionar solo los comandos que desea importar, y puede excluir los comandos que provocan conflictos de nombre en la sesión.
Los autores de módulos pueden evitar conflictos de nombres utilizando la propiedad DefaultCommandPrefix del manifiesto del módulo para agregar un prefijo predeterminado a todos los nombres de comandos. El valor del parámetro prefijo tiene prioridad sobre el valor de DefaultCommandPrefix.