Buscar..


Introducción

A partir de la versión 2.0 de PowerShell, los desarrolladores pueden crear módulos de PowerShell. Los módulos de PowerShell encapsulan un conjunto de funcionalidades comunes. Por ejemplo, hay módulos PowerShell específicos del proveedor que administran varios servicios en la nube. También hay módulos genéricos de PowerShell que interactúan con los servicios de redes sociales y realizan tareas de programación comunes, como la codificación Base64, el trabajo con Named Pipes, y más.

Los módulos pueden exponer alias de comandos, funciones, variables, clases y más.

Crear un módulo de manifiesto

@{
  RootModule = 'MyCoolModule.psm1'
  ModuleVersion = '1.0'
  CompatiblePSEditions = @('Core')
  GUID = '6b42c995-67da-4139-be79-597a328056cc'
  Author = 'Bob Schmob'
  CompanyName = 'My Company'
  Copyright = '(c) 2017 Administrator. All rights reserved.'
  Description = 'It does cool stuff.'
  FunctionsToExport = @()
  CmdletsToExport = @()
  VariablesToExport = @()
  AliasesToExport = @()
  DscResourcesToExport = @()
}

Todo buen módulo de PowerShell tiene un módulo manifiesto. El manifiesto del módulo simplemente contiene metadatos sobre un módulo de PowerShell, y no define el contenido real del módulo.

El archivo de manifiesto es un archivo de script de PowerShell, con una extensión de archivo .psd1 , que contiene una HashTable. La tabla hash en el manifiesto debe contener claves específicas para que PowerShell pueda interpretarlo correctamente como un archivo de módulo de PowerShell.

El ejemplo anterior proporciona una lista de las claves básicas de HashTable que conforman un módulo manifiesto, pero hay muchos otros. El comando New-ModuleManifest ayuda a crear un nuevo esqueleto de manifiesto de módulo.

Ejemplo de módulo simple

function Add {
  [CmdletBinding()]
  param (
    [int] $x
  , [int] $y
  )

  return $x + $y
}

Export-ModuleMember -Function Add

Este es un ejemplo simple de cómo podría verse un archivo de módulo de script de PowerShell. Este archivo se llamaría MyCoolModule.psm1 y se hace referencia desde el archivo de manifiesto del módulo (.psd1). Notará que el comando Export-ModuleMember nos permite especificar qué funciones en el módulo queremos "exportar" o exponer al usuario del módulo. Algunas funciones serán solo internas, y no deberían estar expuestas, por lo que se omitirán de la llamada a Export-ModuleMember .

Exportando una variable desde un módulo

$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName

Para exportar una variable desde un módulo, use el comando Export-ModuleMember , con el parámetro -Variable . Sin embargo, recuerde que si la variable tampoco se exporta explícitamente en el archivo de manifiesto del módulo (.psd1), entonces la variable no será visible para el consumidor del módulo. Piense en el módulo manifest como un "portero". Si una función o variable no está permitida en el manifiesto del módulo, no será visible para el consumidor del módulo.

Nota: Exportar una variable es similar a hacer público un campo en una clase. No es aconsejable. Sería mejor exponer una función para obtener el campo y una función para establecer el campo.

Estructuración de módulos PowerShell

En lugar de definir todas sus funciones en un solo archivo de módulo de script PowerShell .psm1 , es posible que desee dividir su función en archivos individuales. A continuación, puede crear puntos de estos archivos desde su archivo de módulo de script, que en esencia los trata como si fueran parte del archivo .psm1 .

Considere la estructura de directorio de este módulo:

\MyCoolModule
  \Functions
    Function1.ps1
    Function2.ps1
    Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1

Dentro de su archivo MyCoolModule.psm1 , puede insertar el siguiente código:

Get-ChildItem -Path $PSScriptRoot\Functions | 
  ForEach-Object -Process { . $PSItem.FullName }

Esto generaría los archivos de funciones individuales en el archivo de módulo .psm1 .

Ubicación de los módulos

PowerShell busca módulos en los directorios listados en $ Env: PSModulepath.

Un módulo llamado foo , en una carpeta llamada foo se encontrará con Import-Module foo

En esa carpeta, PowerShell buscará un manifiesto de módulo (foo.psd1), un archivo de módulo (foo.psm1), una DLL (foo.dll).

Visibilidad del miembro del módulo

Por defecto, solo las funciones definidas en un módulo son visibles fuera del módulo. En otras palabras, si define variables y alias en un módulo, no estarán disponibles excepto en el código del módulo.

Para anular este comportamiento, puede usar el cmdlet Export-ModuleMember . Tiene parámetros denominados -Function , -Variable y -Alias que le permiten especificar exactamente qué miembros se exportan.

Es importante tener en cuenta que si utiliza Export-ModuleMember , solo estarán visibles los elementos que especifique.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow