Condividi tramite


Informazioni sui moduli

Breve descrizione

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

Descrizione lunga

Un modulo è un pacchetto che contiene membri di PowerShell, ad esempio cmdlet, provider, funzioni, flussi di lavoro, variabili e alias.

Gli utenti che scrivono comandi possono utilizzare i moduli per organizzare i comandi e condividerli con altri utenti. Gli utenti che ricevono i moduli possono aggiungere i comandi nei moduli alle sessioni di PowerShell e usarli come i comandi predefiniti.

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

Che cos'è un modulo?

Un modulo è un pacchetto che contiene membri di PowerShell, ad esempio cmdlet, provider, funzioni, flussi di lavoro, variabili e alias. I membri di questo pacchetto possono essere implementati in uno script di PowerShell, in una DLL compilata o in una combinazione di entrambi. Questi file sono solitamente raggruppati in un'unica directory. Per altre informazioni, vedere Informazioni su un modulo di Windows PowerShell nella documentazione dell'SDK.

Caricamento automatico del modulo

A partire da PowerShell 3.0, PowerShell importa automaticamente i moduli la prima volta che si esegue un comando in un modulo installato. Ora è possibile utilizzare i comandi in un modulo senza alcuna impostazione o configurazione del profilo, quindi non è necessario gestire i moduli dopo averli installati sul computer.

I comandi in un modulo sono anche più facili da trovare. Il Get-Command cmdlet ottiene ora tutti i comandi in tutti i moduli installati, anche se non sono ancora nella sessione. È possibile trovare un comando e utilizzarlo senza importare, è necessario importare prima il modulo.

Ognuno degli esempi seguenti causa l'importazione del modulo CimCmdlets, che contiene Get-CimInstance, 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
    

Get-Command I comandi che includono un carattere jolly (*) sono considerati per l'individuazione, non per l'uso e non importano alcun modulo.

Vengono importati automaticamente solo i moduli archiviati nel percorso specificato dalla variabile di ambiente PSModulePath. I moduli in altre posizioni devono essere importati eseguendo il Import-Module cmdlet.

Inoltre, i comandi che usano i provider di PowerShell non importano automaticamente un modulo. Ad esempio, se si utilizza 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: .

È comunque possibile eseguire il Import-Module comando per importare un modulo e utilizzare la variabile per abilitare, disabilitare e configurare l'importazione $PSModuleAutoloadingPreference automatica dei moduli. Per altre informazioni, vedere about_Preference_Variables.

Come utilizzare un modulo

Per utilizzare un modulo, eseguire le attività seguenti:

  1. Installare il modulo. (Questo viene spesso fatto per te.)
  2. Trova i comandi aggiunti dal modulo.
  3. Utilizzare i comandi aggiunti dal modulo.

In questo argomento viene illustrato come eseguire queste attività. Include anche altre informazioni utili sulla gestione dei moduli.

Come installare un modulo

Se ricevi un modulo come cartella contenente file, devi installarlo sul tuo computer prima di poterlo utilizzare in PowerShell.

La maggior parte dei moduli viene installata automaticamente. PowerShell viene fornito con diversi moduli preinstallati, a volte chiamati moduli principali . Nei computer basati su Windows, se le funzionalità incluse nel sistema operativo dispongono di cmdlet per gestirle, tali moduli sono preinstallati. Quando si installa una funzionalità di Windows, utilizzando, ad esempio, l'Aggiunta guidata ruoli e funzionalità in Server Manager o la finestra di dialogo Attiva o disattiva funzionalità di Windows nel Pannello di controllo, vengono installati tutti i moduli di PowerShell che fanno parte della funzionalità. Molti altri moduli vengono forniti in un programma di installazione o di installazione che installa il modulo.

Utilizzare il seguente comando per creare una directory Modules per l'utente corrente:

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

Copiare l'intera cartella del modulo nella directory Moduli. È possibile utilizzare qualsiasi metodo per copiare la cartella, inclusi Esplora risorse e Cmd.exe, nonché PowerShell. In PowerShell usare il cmdlet Copy-Item. Ad esempio, per copiare la cartella MyModule dalla C:\ps-test\MyModule directory Modules, digitare:

Copy-Item -Path C:\ps-test\MyModule -Destination `
    $HOME\Documents\PowerShell\Modules

È possibile installare un modulo in qualsiasi posizione, ma l'installazione dei moduli in un percorso predefinito del modulo semplifica la gestione. Per altre informazioni sui percorsi predefiniti dei moduli, vedere la sezione Percorsi dei moduli e delle risorse DSC e PSModulePath .

Come trovare i moduli installati

Per trovare i moduli installati in una posizione predefinita, ma non ancora importati nella sessione, digitare:

Get-Module -ListAvailable

Per trovare i moduli che sono già stati importati nella sessione, al prompt di PowerShell digitare:

Get-Module

Per ulteriori informazioni sul Get-Module cmdlet, vedere Get-Module.

Come trovare i comandi in un modulo

Usare il cmdlet Get-Command per trovare tutti i comandi disponibili. È possibile usare i parametri del cmdlet Get-Command 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 cmdlet Get-Command, vedere Get-Command.

Come ottenere assistenza per i comandi in un modulo

Se il modulo contiene file della Guida per i comandi esportati, il cmdlet visualizzerà gli argomenti della Get-Help Guida. Usare lo stesso Get-Help formato di comando che si userebbe per ottenere assistenza per qualsiasi comando in PowerShell.

A partire da PowerShell 3.0, è possibile scaricare i file della Guida per un modulo e scaricare gli aggiornamenti dei file della Guida in modo che non siano mai obsoleti.

Per ottenere assistenza per un comando in un modulo, digitare:

Get-Help <command-name>

Per ottenere assistenza online per il comando in un modulo, digitare:

Get-Help <command-name> -Online

Per scaricare e installare i file della guida per i comandi in un modulo, digitare:

Update-Help -Module <module-name>

Per ulteriori informazioni, vedere Get-Help e Update-Help.

Come importare un modulo

Potrebbe essere necessario importare un modulo o importare un file di modulo. L'importazione è necessaria quando un modulo non è installato nei percorsi specificati dalla variabile di ambiente PSModulePath , $env:PSModulePathoppure il modulo è costituito da un file, ad esempio un file .dll o PSM1, anziché da un modulo tipico recapitato come cartella.

È inoltre possibile scegliere di importare un modulo in modo da poter utilizzare i parametri del Import-Module comando, ad esempio il parametro Prefix, che aggiunge un prefisso distintivo ai nomi dei sostantivi di tutti i comandi importati, o il parametro NoClobber , che impedisce al modulo di aggiungere comandi che nascondono o sostituiscono i comandi esistenti nella sessione.

Per importare i moduli, usare il Import-Module cmdlet.

Per importare i moduli in un percorso PSModulePath nella sessione corrente, usare il formato di comando seguente.

Import-Module <module-name>

Ad esempio, il comando seguente importa il modulo BitsTransfer nella sessione corrente.

Import-Module BitsTransfer

Per importare un modulo che non si trova in un percorso predefinito del modulo, utilizzare il percorso completo della cartella del modulo nel comando.

Ad esempio, per aggiungere il C:\ps-test modulo TestCmdlets nella directory alla sessione, digitare:

Import-Module C:\ps-test\TestCmdlets

Per importare un file di modulo che non è contenuto in una cartella del modulo, utilizzare il percorso completo del file del modulo nel comando.

Ad esempio, per aggiungere il modulo TestCmdlets.dll nella directory C:\ps-test alla sessione, digitare:

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

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

Come importare un modulo in ogni sessione

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

Per altre informazioni sui profili, vedere about_Profiles.

Come rimuovere un modulo

Quando si rimuove un modulo, i comandi aggiunti dal modulo vengono eliminati dalla sessione.

Per rimuovere un modulo dalla sessione, utilizzare il seguente formato di comando.

Remove-Module <module-name>

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 di un modulo. La rimozione di un modulo non disinstalla il modulo. Per altre informazioni, vedere Remove-Module.

Posizioni dei moduli e delle risorse DSC e PSModulePath

La variabile di ambiente $env:PSModulePath contiene un elenco di percorsi delle cartelle in cui viene eseguita la ricerca per trovare moduli e risorse.

Per impostazione predefinita, le posizioni effettive assegnate a $env:PSModulePath sono:

  • Posizioni a livello di sistema: $PSHOME\Modules

    Queste cartelle contengono moduli forniti con Windows e PowerShell.

    Le risorse DSC incluse in PowerShell vengono archiviate nella $PSHOME\Modules\PSDesiredStateConfiguration\DSCResources cartella.

  • Moduli specifici dell'utente: si tratta di moduli installati dall'utente nell'ambito dell'utente. Install-Module ha un parametro Scope che consente di specificare se il modulo è installato per l'utente corrente o per tutti gli utenti. Per altre informazioni, vedere Install-Module.

    Il percorso CurrentUser specifico dell'utente in Windows è la PowerShell\Modules cartella che si trova nel percorso Documenti nel profilo utente. Il percorso specifico di tale percorso varia in base alla versione di Windows e all'utilizzo o meno del reindirizzamento delle cartelle. Microsoft OneDrive può anche modificare la posizione della cartella Documenti .

    Per impostazione predefinita, in Windows 10 e versioni successive, tale posizione è $HOME\Documents\PowerShell\Modules. Su Linux o Mac, la posizione di CurrentUser è $HOME/.local/share/powershell/Modules.

    Annotazioni

    È possibile verificare la posizione della cartella Documenti utilizzando il seguente comando: [Environment]::GetFolderPath('MyDocuments').

  • Il percorso AllUsers è $env:PROGRAMFILES\PowerShell\Modules in Windows. Su Linux o Mac i moduli sono memorizzati in /usr/local/share/powershell/Modules.

Annotazioni

Per aggiungere o modificare i file nella directory $env:Windir\System32, avviare PowerShell con l'opzione Esegui come amministratore.

È possibile modificare le posizioni predefinite dei moduli nel sistema modificando il valore della variabile di ambiente PSModulePath , $Env:PSModulePath. La variabile di ambiente PSModulePath è modellata sulla variabile di ambiente Path e ha lo stesso formato.

Per visualizzare le posizioni predefinite dei moduli, digitare:

$Env:PSModulePath

Per aggiungere un percorso predefinito del modulo, utilizzare il seguente formato di comando.

$Env:PSModulePath = $Env:PSModulePath + ";<path>"

Il punto e virgola (;) nel comando separa il nuovo percorso dal percorso che lo precede nell'elenco.

Ad esempio, per aggiungere la C:\ps-test\Modules directory, digitare:

$Env:PSModulePath + ";C:\ps-test\Modules"

Per aggiungere una posizione predefinita del modulo su Linux o MacOS, utilizzare il seguente formato di comando:

$Env:PSModulePath += ":<path>"

Ad esempio, per aggiungere la /usr/local/Fabrikam/Modules directory al valore della variabile di ambiente PSModulePath , digitare:

$Env:PSModulePath += ":/usr/local/Fabrikam/Modules"

Su Linux o MacOS, i due punti (:) nel comando separano il nuovo percorso dal percorso che lo precede nell'elenco.

Quando si aggiunge un percorso a PSModulePath e Get-Module i Import-Module comandi includono moduli in tale percorso.

Il valore impostato influisce solo sulla sessione corrente. Per rendere persistente la modifica, aggiungere il comando al profilo di PowerShell o usare Sistema nel Pannello di controllo per modificare il valore della variabile di ambiente PSModulePath nel Registro di sistema.

Inoltre, per rendere persistente la modifica, è possibile utilizzare anche il metodo SetEnvironmentVariable della classe System.Environment per aggiungere un oggetto Path alla variabile di ambiente PSModulePath .

Per altre informazioni sulla variabile PSModulePath , vedere about_Environment_Variables.

Moduli e conflitti di nomi

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

I conflitti di nome possono avere come risultato l'occultamento o la sostituzione dei comandi.

Nascosto

Un comando è nascosto quando non è il comando che viene eseguito quando si digita il nome del comando, ma è possibile eseguirlo utilizzando un altro metodo, ad esempio qualificando il nome del comando con il nome del modulo o dello snap-in in cui ha avuto origine.

Rimpiazzato

Un comando viene sostituito quando non è possibile eseguirlo perché è stato sovrascritto da un comando con lo stesso nome. Anche quando si rimuove il modulo che ha causato il conflitto, non è possibile eseguire un comando sostituito a meno che non si riavvii la sessione.

Import-Module potrebbero aggiungere comandi che nascondono e sostituiscono i comandi nella sessione corrente. Inoltre, i comandi nella sessione possono nascondere i comandi aggiunti dal modulo.

Per rilevare i conflitti di nomi, usare il parametro All del cmdlet Get-Command. A partire da PowerShell 3.0, Get-Command ottiene solo i comandi che vengono 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 prefisso del cmdlet Import-Module. 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 possa nascondere o sostituire i comandi esistenti nella sessione.

È anche possibile usare ilalias , cmdlet, Funzionee parametri variabile di per selezionare solo i comandi da importare ed è possibile escludere i comandi che causano conflitti di nome nella sessione.

Gli autori di moduli possono impedire 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 di prefisso ha la precedenza sul valore di DefaultCommandPrefix.

Anche se un comando è nascosto, è possibile eseguirlo qualificando il nome del comando con il nome del modulo o dello snap-in in cui ha avuto origine.

Le regole di precedenza dei comandi di PowerShell determinano quale comando viene eseguito quando la sessione include comandi con lo stesso nome.

Ad esempio, quando una sessione include una funzione e un cmdlet con lo stesso nome, PowerShell esegue la funzione per impostazione predefinita. Quando la sessione include comandi dello stesso tipo con lo stesso nome, ad esempio due cmdlet con lo stesso nome, per impostazione predefinita, esegue 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.

Moduli e snap-in (moduli aggiuntivi)

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

Prima di rimuovere un modulo o uno snap-in dalla sessione, utilizzare i comandi seguenti per determinare quali comandi verranno rimossi.

Per trovare l'origine di un cmdlet nella sessione, utilizzare il formato di comando seguente:

Get-Command <cmdlet-name> | Format-List -Property verb,noun,pssnapin,module

Ad esempio, per trovare l'origine del cmdlet Get-Date, digitare:

Get-Command Get-Date | Format-List -Property verb,noun,module

I comandi esportati da un modulo devono seguire le regole di denominazione dei comandi di PowerShell. Se il modulo importato esporta cmdlet o funzioni con verbi non approvati nei nomi, viene visualizzato il Import-Module messaggio di avviso seguente.

ATTENZIONE: alcuni nomi di comando importati includono verbi non approvati che potrebbero renderli meno individuabili. Utilizzare il parametro Verbose per ulteriori dettagli o digitare Get-Verb per visualizzare l'elenco dei verbi approvati.

Questo messaggio è solo un avviso. Il modulo completo viene ancora importato, inclusi i comandi non conformi. Anche se il messaggio viene visualizzato agli utenti del modulo, il problema di denominazione deve essere risolto dall'autore del modulo.

Per eliminare il messaggio di avviso, utilizzare il parametro DisableNameChecking del Import-Module cmdlet.

Moduli integrati e snap-in

In PowerShell 2.0 e nei programmi host di tipo precedente in PowerShell 3.0 e versioni successive, i comandi di base installati con PowerShell vengono inseriti in snap-in che vengono aggiunti automaticamente a ogni sessione di PowerShell.

A partire da PowerShell 3.0, per i programmi host che implementano l'API dello InitialSessionState.CreateDefault2 stato della sessione iniziale, lo snap-in Microsoft.PowerShell.Core viene aggiunto a ogni sessione per impostazione predefinita. I moduli vengono caricati automaticamente al primo utilizzo.

Annotazioni

Le sessioni remote, incluse le sessioni avviate tramite il New-PSSession cmdlet, sono sessioni di tipo precedente in cui i comandi incorporati vengono inseriti in snap-in.

I moduli (o snap-in) seguenti vengono installati con PowerShell.

  • Cmdlets Cim
  • Microsoft.PowerShell.Archive
  • Microsoft.PowerShell.Core
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • Microsoft.WSMan.Management
  • Modulo "PackageManagement"
  • PowerShellGet
  • PSDesiredStateConfiguration
  • PSDiagnostica
  • PSReadline

Eventi del modulo di registrazione

A partire da PowerShell 3.0, è possibile registrare gli eventi di esecuzione per i cmdlet e le funzioni nei moduli e negli snap-in di PowerShell impostando la proprietà LogPipelineExecutionDetails dei moduli e degli snap-in su $True. È anche possibile usare un'impostazione di Criteri di gruppo, Attiva registrazione modulo, per abilitare la registrazione dei moduli in tutte le sessioni di PowerShell. Per altre informazioni, vedere gli articoli relativi alla registrazione e ai criteri di gruppo.

Vedere anche