Condividi tramite


about_Modules

Descrizione breve

Viene illustrato come installare, importare e usare i moduli di PowerShell.

Descrizione lunga

PowerShell è sia una shell dei comandi che un linguaggio di scripting. I comandi in PowerShell vengono implementati come script, funzioni o cmdlet. Il linguaggio include parole chiave, che forniscono la struttura e la logica di elaborazione e altre risorse, ad esempio variabili, provider, alias.

Un modulo è un'unità self-contained e riutilizzabile che può includere cmdlet, provider, funzioni, variabili e altre risorse. Per impostazione predefinita, PowerShell carica automaticamente un modulo installato la prima volta che si usa un comando dal modulo. È possibile configurare il comportamento di caricamento automatico del modulo usando la variabile $PSModuleAutoloadingPreference. Per altre informazioni, vedere about_Preference_Variables.

È anche possibile caricare o scaricare manualmente i moduli durante una sessione di PowerShell. Per caricare o ricaricare un modulo, usare Import-Module. Per scaricare un modulo, usare il Remove-Module cmdlet .

PowerShell include un set di moduli di base. Chiunque può creare nuovi moduli usando C# o il linguaggio di scripting di PowerShell stesso. I moduli scritti in C# come assembly .NET compilati sono noti come moduli nativi. I moduli scritti in PowerShell sono noti come moduli di script.

Questo articolo illustra come usare i moduli di PowerShell. Per informazioni su come creare moduli di PowerShell, vedere Scrittura di un modulo di PowerShell.

Nota

Prima di PowerShell 3.0, i cmdlet e i provider sono stati inseriti in pacchetti negli snap-in di PowerShell. A partire da PowerShell 3.0, lo snap-in Microsoft.PowerShell.Core viene aggiunto a ogni sessione per impostazione predefinita. Questo è l'unico snap-in rimanente in PowerShell. Tutti gli altri snap-in sono stati convertiti in moduli. La creazione di nuovi snap-in non è più supportata.

Percorsi predefiniti dei moduli

PowerShell archivia i moduli nei percorsi predefiniti seguenti:

  • In Windows
    • Ambito di tutti gli utenti : $env:ProgramFiles\PowerShell\Modules
    • Ambito utente corrente - $HOME\Documents\PowerShell\Modules
    • Moduli forniti con PowerShell - $PSHOME\Modules
  • In Linux e macOS
    • Ambito di tutti gli utenti : /usr/local/share/powershell/Modules
    • Ambito utente corrente - $HOME/.local/share/powershell/Modules
    • Moduli forniti con PowerShell - $PSHOME/Modules

Per impostazione predefinita, la Modules cartella per l'utente corrente non esiste. Se è stato installato un modulo nell'ambito CurrentUser usando Install-Module o Install-PSResource, questi cmdlet creano la Modules cartella per l'utente corrente. Se la cartella non esiste, è possibile crearla manualmente.

Usare il comando seguente per creare una Modules cartella per l'utente corrente:

$folder = New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules

Queste posizioni vengono incluse automaticamente nella $env:PSModulePath variabile di ambiente. Per altre informazioni sui percorsi predefiniti dei moduli, vedere about_PSModulePath.

Caricamento automatico dei moduli

La prima volta che si esegue un comando da un modulo installato, PowerShell importa automaticamente (carica) tale modulo. Il modulo deve essere archiviato nei percorsi specificati nella $env:PSModulePath variabile di ambiente.

Il caricamento automatico dei moduli consente di usare i comandi in un modulo senza alcuna configurazione di installazione o profilo. Ognuno degli esempi seguenti fa sì che il modulo CimCmdlets , che contiene Get-CimInstance, venga importato nella sessione.

  • Eseguire il comando

    Get-CimInstance Win32_OperatingSystem
    
  • Ottenere il comando

    Get-Command Get-CimInstance
    
  • Ottenere la Guida per il comando

    Get-Help Get-CimInstance
    

Quando si usa Get-Command con un carattere jolly (*), PowerShell non importa moduli. È possibile usare caratteri jolly per l'individuazione dei comandi senza caricare moduli che potrebbero non essere necessari nella sessione.

Importare manualmente un modulo

L'importazione manuale di un modulo è necessaria quando un modulo non è installato nei percorsi specificati dalla $env:PSModulePath variabile di ambiente o quando il modulo viene fornito come file autonomo .dll o .psm1 anziché come modulo in pacchetto.

Inoltre, i comandi che usano i provider di PowerShell non importano automaticamente un modulo. Ad esempio, se si usa un comando che richiede l'unità WSMan: , ad esempio il Get-PSSessionConfiguration cmdlet, potrebbe essere necessario eseguire il Import-Module cmdlet per importare il modulo Microsoft.WSMan.Management che include l'unità WSMan: .

È anche possibile modificare la modalità di importazione del modulo nella sessione. Ad esempio, il parametro Prefix di Import-Module aggiunge un prefisso distintivo alla parte sostantiva dei cmdlet importati dal modulo. Il parametro NoClobber impedisce al modulo di aggiungere comandi che nasconderebbero o sostituivano i comandi esistenti nella sessione. Per altre informazioni, vedere Gestire i conflitti di nomi.

L'esempio seguente importa il modulo BitsTransfer nella sessione corrente.

Import-Module BitsTransfer

Per importare un modulo che non si trova in $env:PSModulePath, usare il percorso completo della cartella del modulo. Ad esempio, per aggiungere il modulo TestCmdlets nella C:\ps-test directory alla sessione, digitare:

Import-Module C:\ps-test\TestCmdlets

Per importare un file di modulo non contenuto in una cartella del modulo, usare il percorso completo del file di modulo nel comando . Ad esempio, per aggiungere il modulo TestCmdlets.dll nella C:\ps-test directory alla sessione, digitare:

Import-Module C:\ps-test\TestCmdlets.dll

Per altre informazioni sull'aggiunta di moduli alla sessione, vedere Import-Module.

Importare un modulo all'inizio di ogni sessione

Il Import-Module comando importa i moduli nella sessione di PowerShell corrente. Per importare un modulo in ogni sessione di PowerShell avviata, aggiungere il Import-Module comando al profilo di PowerShell.

Per altre informazioni sui profili, vedere about_Profiles.

Installare un modulo pubblicato

Un modulo pubblicato è un modulo disponibile da un repository registrato, ad esempio PowerShell Gallery. I moduli PowerShellGet e Microsoft.PowerShell.PSResourceGet forniscono i cmdlet per trovare, installare e pubblicare moduli di PowerShell in un repository registrato.

Il modulo PowerShellGet è incluso in PowerShell 5.0 e versioni successive. Il modulo Microsoft.PowerShell.PSResourceGet è incluso in PowerShell 7.4 e versioni successive ed è la gestione pacchetti preferita per PowerShell. È possibile installare Microsoft.PowerShell.PSResourceGet , affiancato a PowerShellGet, nelle versioni precedenti di PowerShell. Usare il Install-Module cmdlet o Install-PSResource per installare moduli da PowerShell Gallery.

 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

Per altre informazioni, vedere Panoramica di PowerShellGet.

Installare manualmente un modulo

È possibile installare manualmente un modulo copiando il contenuto del modulo da un'altra cartella. Tale cartella può trovarsi in un'altra posizione nel computer locale o installata in un altro computer. Per installare manualmente un modulo, copiare l'intera cartella del modulo in un nuovo percorso incluso in $env:PSModulePath.

In PowerShell usare il Copy-Item cmdlet . Ad esempio, eseguire il comando seguente per copiare la MyModule cartella da C:\PSTest:

$modulePath = $HOME\Documents\PowerShell\Modules\MyModule
Copy-Item -Path C:\PSTest\MyModule\* -Destination $modulePath -Recurse

Un modulo può essere installato in qualsiasi percorso, ma risulta più facilmente gestibile se installato nel percorso predefinito.

Trovare i moduli installati

Il Get-Module cmdlet ottiene i moduli di PowerShell caricati nella sessione di PowerShell corrente.

Get-Module

I moduli elencati possono includere moduli importati da qualsiasi posizione, non solo da $env:PSModulePath.

Usare il comando seguente per elencare i moduli installati in $env:PSModulePath:

Get-Module -ListAvailable

Questo comando ottiene tutti i moduli installati in $env:PSModulePath, non solo i moduli importati nella sessione corrente. Questo comando non elenca i moduli installati in altri percorsi.

Per altre informazioni, vedere Get-Module.

Elencare i comandi in un modulo

Usare il Get-Command cmdlet per trovare tutti i comandi disponibili. È possibile usare i parametri del Get-Command cmdlet per filtrare i comandi, ad esempio per modulo, nome e sostantivo.

Per trovare tutti i comandi in un modulo, digitare:

Get-Command -Module <module-name>

Ad esempio, per trovare i comandi nel modulo BitsTransfer , digitare:

Get-Command -Module BitsTransfer

Per altre informazioni sul Get-Command cmdlet, vedere Get-Command.

Rimuovere un modulo

Quando si rimuove un modulo, i comandi che ha aggiunto vengono eliminati dalla sessione. Ad esempio, il comando seguente rimuove il modulo BitsTransfer dalla sessione corrente.

Remove-Module BitsTransfer

La rimozione di un modulo inverte l'operazione di importazione. La rimozione di un modulo non disinstalla il modulo. Per altre informazioni, vedere Remove-Module.

I comandi possono essere aggiunti alla sessione da moduli e snap-in. I moduli possono aggiungere tutti i tipi di comandi, inclusi cmdlet, provider e funzioni e elementi, ad esempio variabili, alias e unità di PowerShell. Gli snap-in possono aggiungere solo cmdlet e provider.

Prima di rimuovere un modulo dalla sessione, usare i comandi seguenti per determinare il modulo da rimuovere.

Ad esempio, usare il comando seguente per trovare l'origine dei Get-Date cmdlet e Get-Help :

Get-Command Get-Date, Get-Help -All |
    Select-Object -Property Name, CommandType, Module ,PSSnapIn

L'output seguente mostra che il Get-Help cmdlet si trova nello snap-in Microsoft.PowerShell.Core . Questo snap-in non può essere rimosso dalla sessione.

Name     CommandType Module                       PSSnapIn
----     ----------- ------                       --------
Get-Date    Function
Get-Date      Cmdlet Microsoft.PowerShell.Utility
Get-Help      Cmdlet                              Microsoft.PowerShell.Core

Esistono due origini per Get-Date. Uno è una funzione e l'altro è un cmdlet nel modulo Microsoft.PowerShell.Utility . È possibile rimuovere il modulo usando Remove-Module. Per rimuovere la funzione, è possibile eliminarla dall'unità Function: .

Remove-Item Function:Get-Date

Per altre informazioni sull'unità Function: , vedere about_Function_Provider.

Gestire i conflitti di nomi

I conflitti dei nomi si verificano quando più comandi della sessione hanno lo stesso nome. L'importazione di un modulo genera un conflitto di nomi quando i comandi al suo interno hanno gli stessi nomi dei comandi o degli elementi della sessione.

Import-Module potrebbe aggiungere comandi che nascondono e sostituiscono i comandi nella sessione corrente. Se si verificano conflitti dei nomi, è possibile che alcuni comandi vengano nascosti o sostituiti. La sostituzione dei comandi si verifica quando il modulo importato contiene un comando con lo stesso nome di un comando esistente nella sessione. Il comando appena importato ha la precedenza sul comando esistente.

Ad esempio, quando una sessione include una funzione e un cmdlet con lo stesso nome, PowerShell esegue la funzione per impostazione predefinita. Se la sessione include comandi dello stesso tipo con lo stesso nome, ad esempio due cmdlet con lo stesso nome, per impostazione predefinita viene eseguito il comando aggiunto più di recente.

Per altre informazioni, inclusa una spiegazione delle regole di precedenza e delle istruzioni per l'esecuzione di comandi nascosti, vedere about_Command_Precedence.

È possibile eseguire un comando nascosto o sostituito qualificando il nome del comando. Per qualificare il nome del comando, aggiungere il nome del modulo che contiene la versione del comando desiderato. Ad esempio:

Microsoft.PowerShell.Utility\Get-Date

L'esecuzione Get-Date con il prefisso del nome del modulo assicura che esegua la versione dal modulo Microsoft.PowerShell.Utility .

Per rilevare i conflitti di nomi, usare il parametro All del Get-Command cmdlet . Per impostazione predefinita, Get-Command ottiene solo i comandi eseguiti quando si digita il nome del comando. Il parametro All ottiene tutti i comandi con il nome specifico nella sessione.

Per evitare conflitti di nomi, usare i parametri NoClobber o Prefix del Import-Module cmdlet. Il parametro Prefix aggiunge un prefisso ai nomi dei comandi importati in modo che siano univoci nella sessione. Il parametro NoClobber non importa alcun comando che nasconde o sostituisce i comandi esistenti nella sessione.

È anche possibile usare i parametri Alias, Cmdlet, Function e Variable di Import-Module per selezionare solo i comandi da importare ed escludere i comandi che causano conflitti di nome nella sessione.

Gli autori di moduli possono evitare conflitti di nomi usando la proprietà DefaultCommandPrefix del manifesto del modulo per aggiungere un prefisso predefinito a tutti i nomi dei comandi. Il valore del parametro Prefix ha la precedenza sul valore di DefaultCommandPrefix.

Vedi anche