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 che possono essere importate in una sessione di PowerShell o in qualsiasi programma PowerShell personalizzato.
Prima che la funzionalità contenuta in un modulo sia utilizzabile, il modulo deve essere caricato nella sessione di PowerShell. 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 scaricare o ricaricare manualmente i moduli durante una sessione di PowerShell. Per scaricare un modulo, usare il Remove-Module
cmdlet . Per caricare o ricaricare un modulo, usare Import-Module
.
PowerShell include un set di moduli di base. Chiunque può creare nuovi comandi di PowerShell o altre risorse e pubblicarli come moduli che gli utenti possono installare in base alle esigenze.
È possibile scrivere moduli in C# come assembly .NET compilati, noti come moduli nativi o in PowerShell normale, noti come moduli di script. Questo argomento 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.
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. Microsoft.PowerShell.PSResourceGet è il nuovo strumento di gestione pacchetti preferito per PowerShell e può essere installato 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
Se si riceve un modulo come cartella con i file in esso contenuti, è necessario installarlo nel computer prima di poterlo usare in PowerShell.
PowerShell include diversi moduli preinstallati. Nei computer basati su Windows molte funzionalità di Windows includono moduli per la gestione della funzionalità. Questi moduli vengono installati quando viene installata la funzionalità. Altri moduli possono venire in un programma di installazione o di installazione che installa il modulo.
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
Copiare l'intera cartella del modulo nella nuova cartella creata. In PowerShell usare il Copy-Item
cmdlet . Ad esempio, eseguire il comando seguente per copiare la MyModule
cartella da C:\PSTest
alla cartella appena creata:
Copy-Item -Path C:\PSTest\MyModule -Destination $folder
Un modulo può essere installato in qualsiasi percorso, ma risulta più facilmente gestibile se installato nel percorso predefinito. 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. I moduli in altre posizioni devono essere importati usando il Import-Module
cmdlet .
Il caricamento automatico dei moduli consente di usare i comandi in un modulo senza alcuna configurazione di installazione o profilo. Non è necessario gestire i moduli dopo averli installati nel computer.
Ognuno degli esempi seguenti causa l'importazione del modulo CimCmdlets nella Get-CimInstance
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
È possibile usare il Get-Command
cmdlet elencare i comandi in tutti i moduli installati, anche se non sono ancora presenti nella sessione. 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.
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:
.
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.
È 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.
È possibile importare un modulo installato nell'utente $env:PSModulePath
specificando il nome del modulo. Ad esempio, il comando 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.
Trovare i moduli installati
Il Get-Module
cmdlet ottiene i moduli di PowerShell importati nella sessione.
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 sostituisce 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.