PowerShell
Moduli PowerShell
Ricerca…
introduzione
A partire da PowerShell versione 2.0, gli sviluppatori possono creare moduli PowerShell. I moduli PowerShell racchiudono un insieme di funzionalità comuni. Ad esempio, esistono moduli PowerShell specifici del fornitore che gestiscono vari servizi cloud. Esistono anche moduli PowerShell generici che interagiscono con i servizi di social media ed eseguono attività di programmazione comuni, come la codifica Base64, lavorando con Named Pipes e altro.
I moduli possono esporre alias di comandi, funzioni, variabili, classi e altro.
Crea un modulo manifest
@{
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 = @()
}
Ogni buon modulo PowerShell ha un manifest di modulo. Il manifest del modulo contiene semplicemente metadati relativi a un modulo PowerShell e non definisce i contenuti effettivi del modulo.
Il file manifest è un file di script PowerShell, con estensione .psd1
, che contiene un HashTable. L'hashTable nel manifest deve contenere chiavi specifiche, in modo che PowerShell possa interpretarlo correttamente come un file del modulo PowerShell.
L'esempio precedente fornisce un elenco delle chiavi HashTable principali che compongono un manifest di modulo, ma ce ne sono molte altre. Il comando New-ModuleManifest
ti aiuta a creare un nuovo scheletro manifest del modulo.
Esempio di modulo semplice
function Add {
[CmdletBinding()]
param (
[int] $x
, [int] $y
)
return $x + $y
}
Export-ModuleMember -Function Add
Questo è un semplice esempio di come potrebbe apparire un file del modulo di script PowerShell. Questo file si chiamerebbe MyCoolModule.psm1
e viene fatto riferimento dal file manifest (.psd1) del modulo. Noterai che il comando Export-ModuleMember
ci consente di specificare quali funzioni nel modulo vogliamo "esportare" o esporre all'utente del modulo. Alcune funzioni saranno solo interne e non dovrebbero essere esposte, quindi queste saranno omesse dalla chiamata a Export-ModuleMember
.
Esportare una variabile da un modulo
$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName
Per esportare una variabile da un modulo, si utilizza il comando Export-ModuleMember
, con il parametro -Variable
. Ricorda, tuttavia, che se la variabile non viene esportata esplicitamente nel file manifest del modulo (.psd1), la variabile non sarà visibile al consumatore del modulo. Pensa al modulo manifest come un "gatekeeper". Se una funzione o una variabile non è consentita nel manifest del modulo, non sarà visibile al consumatore del modulo.
Nota: l' esportazione di una variabile è simile alla creazione di un campo in una classe pubblica. Non è consigliabile Sarebbe meglio esporre una funzione per ottenere il campo e una funzione per impostare il campo.
Strutturazione dei moduli PowerShell
Piuttosto che definire tutte le tue funzioni in un singolo file di modulo di script PowerShell .psm1
, potresti voler dividere la tua funzione in singoli file. È quindi possibile dot-source questi file dal file del modulo di script, che in sostanza li tratta come se fossero parte del file .psm1
stesso.
Considera questa struttura di directory del modulo:
\MyCoolModule
\Functions
Function1.ps1
Function2.ps1
Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1
All'interno del tuo file MyCoolModule.psm1
puoi inserire il seguente codice:
Get-ChildItem -Path $PSScriptRoot\Functions |
ForEach-Object -Process { . $PSItem.FullName }
Ciò farebbe dot-source i singoli file di funzione nel file del modulo .psm1
.
Posizione dei moduli
PowerShell cerca i moduli nelle directory elencate in $ Env: PSModulepath.
Un modulo chiamato foo , in una cartella chiamata foo, verrà trovato con Import-Module foo
In tale cartella, PowerShell cercherà un manifest del modulo (foo.psd1), un file del modulo (foo.psm1), una DLL (foo.dll).
Visibilità membro del modulo
Per impostazione predefinita, solo le funzioni definite in un modulo sono visibili al di fuori del modulo. In altre parole, se si definiscono variabili e alias in un modulo, non saranno disponibili se non nel codice del modulo.
Per sovrascrivere questo comportamento, è possibile utilizzare il cmdlet Export-ModuleMember
. Ha parametri chiamati -Function
, -Variable
, e -Alias
che consentono di specificare esattamente quali membri vengono esportati.
È importante notare che se si utilizza Export-ModuleMember
, saranno visibili solo gli elementi specificati.