Condividi tramite


Installazione di un modulo di PowerShell

Dopo aver creato il modulo di PowerShell, è probabile che si voglia installare il modulo in un sistema, in modo che l'utente o altri utenti possano usarlo. In generale, si tratta di copiare i file del modulo (ad esempio, il .psm1o l'assembly binario, il manifesto del modulo e qualsiasi altro file associato) in una directory in tale computer. Per un progetto molto piccolo, questo può essere semplice come copiare e incollare i file con Esplora risorse in un singolo computer remoto; Tuttavia, per soluzioni più grandi è possibile usare un processo di installazione più sofisticato. Indipendentemente dal modo in cui si ottiene il modulo nel sistema, PowerShell può usare una serie di tecniche che consentiranno agli utenti di trovare e usare i moduli. Pertanto, il problema principale per l'installazione è garantire che PowerShell sarà in grado di trovare il modulo. Per altre informazioni, vedere Importazione di un modulo di PowerShell.

Regole per l'installazione di moduli

Le informazioni seguenti riguardano tutti i moduli, inclusi i moduli creati per uso personalizzato, i moduli che si ottengono da altre parti e i moduli distribuiti ad altri utenti.

Installare moduli in PSModulePath

Quando possibile, installare tutti i moduli in un percorso elencato nella variabile di ambiente PSModulePath o aggiungere il percorso del modulo al valore della variabile di ambiente PSModulePath.

Il PSModulePath variabile di ambiente ($Env:PSModulePath) contiene i percorsi dei moduli di Windows PowerShell. I cmdlet si basano sul valore di questa variabile di ambiente per trovare i moduli.

Per impostazione predefinita, il valore della variabile di ambiente PSModulePath contiene le directory del modulo utente e di sistema seguenti, ma è possibile aggiungere e modificare il valore.

  • $PSHOME\Modules (%windir%\System32\WindowsPowerShell\v1.0\Modules)

    Avvertimento

    Questa posizione è riservata ai moduli forniti con Windows. Non installare i moduli in questo percorso.

  • $HOME\Documents\WindowsPowerShell\Modules (%HOMEDRIVE%%HOMEPATH%\Documents\WindowsPowerShell\Modules)

  • $Env:ProgramFiles\WindowsPowerShell\Modules (%ProgramFiles%\WindowsPowerShell\Modules)

    Per ottenere il valore della variabile di ambiente PSModulePath, usare uno dei comandi seguenti.

    $Env:PSModulePath
    [Environment]::GetEnvironmentVariable("PSModulePath")
    

    Per aggiungere un percorso del modulo al valore della variabile di ambiente PSModulePath, usare il formato di comando seguente. Questo formato usa il metodo SetEnvironmentVariable della classe System.Environment per apportare una modifica indipendente dalla sessione alla variabile di ambiente PSModulePath.

    #Save the current value in the $p variable.
    $p = [Environment]::GetEnvironmentVariable("PSModulePath")
    
    #Add the new path to the $p variable. Begin with a semi-colon separator.
    $p += ";C:\Program Files (x86)\MyCompany\Modules\"
    
    #Add the paths in $p to the PSModulePath value.
    [Environment]::SetEnvironmentVariable("PSModulePath",$p)
    

    Importante

    Dopo aver aggiunto il percorso a PSModulePath, è necessario trasmettere un messaggio di ambiente sulla modifica. La trasmissione della modifica consente ad altre applicazioni, ad esempio la shell, di raccogliere la modifica. Per trasmettere la modifica, fare in modo che il codice di installazione del prodotto invii un messaggio di WM_SETTINGCHANGE con lParam impostato sulla stringa "Ambiente". Assicurarsi di inviare il messaggio dopo che il codice di installazione del modulo è stato aggiornato PSModulePath.

Usare il nome della directory del modulo corretto

Un modulo ben formato è un modulo archiviato in una directory con lo stesso nome del nome di base di almeno un file nella directory del modulo. Se un modulo non è ben formato, Windows PowerShell non lo riconosce come modulo.

Il "nome di base" di un file è il nome senza l'estensione del nome file. In un modulo ben formato, il nome della directory contenente i file di modulo deve corrispondere al nome di base di almeno un file nel modulo.

Ad esempio, nel modulo Fabrikam di esempio, la directory contenente i file di modulo è denominata "Fabrikam" e almeno un file ha il nome di base "Fabrikam". In questo caso, sia Fabrikam.psd1 che Fabrikam.dll hanno il nome di base "Fabrikam".

C:\Program Files
  Fabrikam Technologies
    Fabrikam Manager
      Modules
        Fabrikam
          Fabrikam.psd1 (module manifest)
          Fabrikam.dll (module assembly)

Effetto dell'installazione non corretta

Se il modulo non è ben formato e la relativa posizione non è inclusa nel valore della variabile di ambiente PSModulePath, le funzionalità di individuazione di base di Windows PowerShell, ad esempio le seguenti, non funzionano.

  • La funzionalità Caricamento automatico del modulo non può importare automaticamente il modulo.

  • Il parametro ListAvailable del cmdlet Get-Module non riesce a trovare il modulo.

  • Il cmdlet import-module non riesce a trovare il modulo. Per importare il modulo, è necessario specificare il percorso completo del file del modulo radice o del file manifesto del modulo.

    Le funzionalità aggiuntive, ad esempio le seguenti, non funzionano a meno che il modulo non venga importato nella sessione. Nei moduli ben formati nella variabile di ambiente PSModulePath, queste funzionalità funzionano anche quando il modulo non viene importato nella sessione.

  • Il cmdlet get-command non riesce a trovare i comandi nel modulo.

  • I cmdlet update-help e save-help non possono aggiornare o salvare la Guida per il modulo.

  • Il cmdlet Show-Command non è in grado di trovare e visualizzare i comandi nel modulo.

    I comandi nel modulo non sono presenti nella finestra di Show-Command in Windows PowerShell Integrated Scripting Environment (ISE).

Dove installare i moduli

Questa sezione illustra dove nel file system installare i moduli di Windows PowerShell. Il percorso dipende dalla modalità di utilizzo del modulo.

Installazione di moduli per un utente specifico

Se si crea un modulo personalizzato o si ottiene un modulo da un'altra parte, ad esempio un sito Web della community di Windows PowerShell e si vuole che il modulo sia disponibile solo per l'account utente, installare il modulo nella directory Modules specifica dell'utente.

$HOME\Documents\WindowsPowerShell\Modules\<Module Folder>\<Module Files>

La directory Modules specifica dell'utente viene aggiunta al valore della variabile di ambiente PSModulePath per impostazione predefinita.

Installazione di moduli per tutti gli utenti nei file di programma

Se si vuole che un modulo sia disponibile per tutti gli account utente nel computer, installare il modulo nel percorso Programmi.

$Env:ProgramFiles\WindowsPowerShell\Modules\<Module Folder>\<Module Files>

Nota

Il percorso programmi viene aggiunto al valore della variabile di ambiente PSModulePath per impostazione predefinita in Windows PowerShell 4.0 e versioni successive. Per le versioni precedenti di Windows PowerShell, è possibile creare manualmente il percorso programmi (%ProgramFiles%\WindowsPowerShell\Modules) e aggiungere questo percorso alla variabile di ambiente PSModulePath come descritto in precedenza.

Installazione di moduli in una directory di prodotti

Se si distribuisce il modulo ad altre parti, usare il percorso predefinito programmi descritto in precedenza oppure creare una sottodirectory specifica dell'azienda o specifica del prodotto della directory %ProgramFiles%.

Ad esempio, Fabrikam Technologies, una società fittizia, fornisce un modulo di Windows PowerShell per il prodotto Fabrikam Manager. Il programma di installazione del modulo crea una sottodirectory Modules nella sottodirectory del prodotto Fabrikam Manager.

C:\Program Files
  Fabrikam Technologies
    Fabrikam Manager
      Modules
        Fabrikam
          Fabrikam.psd1 (module manifest)
          Fabrikam.dll (module assembly)

Per abilitare le funzionalità di individuazione dei moduli di Windows PowerShell per trovare il modulo Fabrikam, il programma di installazione del modulo Fabrikam aggiunge il percorso del modulo al valore della variabile di ambiente PSModulePath.

$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$p += ";C:\Program Files\Fabrikam Technologies\Fabrikam Manager\Modules\"
[Environment]::SetEnvironmentVariable("PSModulePath",$p)

Installazione di moduli nella directory Dei file comuni

Se un modulo viene usato da più componenti di un prodotto o da più versioni di un prodotto, installare il modulo in una sottodirectory specifica del modulo della sottodirectory %ProgramFiles%\Common Files\Modules.

Nell'esempio seguente il modulo Fabrikam viene installato in una sottodirectory Fabrikam della sottodirectory %ProgramFiles%\Common Files\Modules. Si noti che ogni modulo si trova nella propria sottodirectory moduli.

C:\Program Files
  Common Files
    Modules
      Fabrikam
        Fabrikam.psd1 (module manifest)
        Fabrikam.dll (module assembly)

Il programma di installazione assicura quindi il valore della variabile di ambiente PSModulePath include il percorso della sottodirectory Common Files\Modules.

$m = $Env:ProgramFiles + '\Common Files\Modules'
$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$q = $p -split ';'
if ($q -notcontains $m) {
    $q += ";$m"
}
$p = $q -join ';'
[Environment]::SetEnvironmentVariable("PSModulePath", $p)

Installazione di più versioni di un modulo

Per installare più versioni dello stesso modulo, seguire questa procedura.

  1. Creare una directory per ogni versione del modulo. Includere il numero di versione nel nome della directory.
  2. Creare un manifesto del modulo per ogni versione del modulo. Nel valore della chiave ModuleVersion nel manifesto immettere il numero di versione del modulo. Salvare il file manifesto (.psd1) nella directory specifica della versione per il modulo.
  3. Aggiungere il percorso della cartella radice del modulo al valore della variabile di ambiente PSModulePath, come illustrato negli esempi seguenti.

Per importare una versione specifica del modulo, l'utente finale può usare i parametri MinimumVersion o RequiredVersion del cmdlet Import-Module.

Ad esempio, se il modulo Fabrikam è disponibile nelle versioni 8.0 e 9.0, la struttura di directory del modulo Fabrikam potrebbe essere simile alla seguente.

C:\Program Files
Fabrikam Manager
 Fabrikam8
   Fabrikam
     Fabrikam.psd1 (module manifest: ModuleVersion = "8.0")
     Fabrikam.dll (module assembly)
 Fabrikam9
   Fabrikam
     Fabrikam.psd1 (module manifest: ModuleVersion = "9.0")
     Fabrikam.dll (module assembly)

Il programma di installazione aggiunge entrambi i percorsi del modulo al valore della variabile di ambiente PSModulePath.

$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$p += ";C:\Program Files\Fabrikam\Fabrikam8;C:\Program Files\Fabrikam\Fabrikam9"
[Environment]::SetEnvironmentVariable("PSModulePath",$p)

Al termine di questi passaggi, il parametro ListAvailable del cmdlet Get-Module ottiene entrambi i moduli Fabrikam. Per importare un modulo specifico, usare i parametri MinimumVersion o RequiredVersion del cmdlet import-module.

Se entrambi i moduli vengono importati nella stessa sessione e i moduli contengono cmdlet con gli stessi nomi, i cmdlet importati per ultimi sono validi nella sessione.

Gestione dei conflitti dei nomi dei comandi

I conflitti tra i nomi dei comandi possono verificarsi quando i comandi che un modulo esporta hanno lo stesso nome dei comandi nella sessione dell'utente.

Quando una sessione contiene due comandi con lo stesso nome, Windows PowerShell esegue il tipo di comando che ha la precedenza. Quando una sessione contiene due comandi con lo stesso nome e lo stesso tipo, Windows PowerShell esegue il comando aggiunto alla sessione più di recente. Per eseguire un comando che non viene eseguito per impostazione predefinita, gli utenti possono qualificare il nome del comando con il nome del modulo.

Ad esempio, se la sessione contiene una funzione Get-Date e il cmdlet Get-Date, Windows PowerShell esegue la funzione per impostazione predefinita. Per eseguire il cmdlet, anteporre al comando il nome del modulo, ad esempio:

Microsoft.PowerShell.Utility\Get-Date

Per evitare conflitti di nomi, gli autori di moduli possono usare la chiave DefaultCommandPrefix nel manifesto del modulo per specificare un prefisso sostantivo per tutti i comandi esportati dal modulo.

Gli utenti possono usare il parametro prefisso del cmdlet Import-Module per usare un prefisso alternativo. Il valore del parametro prefisso ha la precedenza sul valore della chiave DefaultCommandPrefix.

Supporto dei percorsi nei sistemi non Windows

Le piattaforme non Windows usano il carattere due punti (:) come separatore di percorso e una barra (/) come separatore di directory. La classe [System.IO.Path] include membri statici che possono essere usati per rendere il codice funzionante in qualsiasi piattaforma:

  • [System.IO.Path]::PathSeparator : restituisce il carattere usato per separare i percorsi in una variabile di ambiente PATH per la piattaforma host
  • [System.IO.Path]::DirectorySeparatorChar: restituisce il carattere usato per separare i nomi di directory con un percorso per la piattaforma host

Usare queste proprietà statiche al posto dei caratteri ; e \ quando si creano stringhe di percorso.

Vedere anche

informazioni_Sulla_Precedenza_Degli_Comandi

scrittura di un modulo di Windows PowerShell