Condividi questo post:
Un profilo PowerShell è uno script che viene eseguito quando PowerShell si avvia e ha un nome specifico.
PowerShell supporta diversi profili per utenti e programmi host. Quando diciamo programmi host pensiamo principalmente a Windows PowerShell Console e Windows PowerShell ISE. Tuttavia, non crea i profili per te quindi continua a leggere questo articolo e ti mostrerò come creare e personalizzare i profili con esempi impressionanti.
Possiamo creare 3 file di profilo per ogni utente sul sistema, uno per ogni host (Windows PowerShell Console e ISE) e uno per tutti gli host.
Inoltre, è possibile creare 3 file di profilo per tutti gli utenti se vogliamo applicare qualche personalizzazione applicabile a tutti gli utenti.
IMPORTANTE: se hai un’installazione separata di PowerShell versione 6 allora possiamo creare 4 profili aggiuntivi. Due file di profilo per utente e due file di profilo per tutti gli utenti.
Tabella dei contenuti
Comandi di profilo PowerShell, Host, nomi di profilo, posizioni di profilo
Qui c’è una tabella che mostra i tipi di profilo, il comando che può essere usato per verificare se esiste un profilo e crearli se vogliamo, a quale host si applica questo profilo, il nome del file di profilo e la posizione del file di profilo.
# | Tipo di profilo | Comando | Host | Nome del file del profilo | Localizzazione del file del profilo |
---|---|---|---|---|---|
1* | Utente corrente, Host corrente | $profilo | Console | Microsoft.PowerShell_profile.ps1 | $HOME\ Documents\WindowsPowerShell\ |
2 | Tutti gli utenti, host corrente | $profile.AllUsersCurrentHost | Console | Microsoft.PowerShell_profile.ps1 | $PSHOME\ |
3 | Utente corrente, tutti gli host | $profile.CurrentUserAllHosts | Console, ISE | Profile.ps1 | $HOME\ Documents\WindowsPowerShell\ |
4 | Tutti gli utenti, tutti gli host | $profile.AllUsersAllHosts | Console, ISE | Profile.ps1 | $PSHOME |
5** | Utente corrente, Host corrente | $profile | ISE | Microsoft.PowerShellISE_profile.ps1 | $HOME\ Documents\WindowsPowerShell\ |
6** | Tutti gli utenti, Host corrente | $profile.AllUsersCurrentHost | ISE | Microsoft.PowerShellISE_profile.ps1 | $PSHOME |
Tabella 1 – Tipi di profili PowerShell, comandi, host, nomi e posizioni dei file
* Invece di $profile possiamo usare $profile.CurrentUserCurrentHost.
** Eseguire il comando dalla console di Windows PowerShell ISE.
Per trovare i valori corretti per le variabili $HOME e $PSHOME nella tua installazione di PowerShell, esegui i seguenti comandi:
$HOME
Di solito, il valore di $HOME è C:\Users\user_name
$PSHOME
Di solito, il valore di $PSHOME è C:\Windows\System32\WindowsPowerShell\v1.0
Ricorda: se hai un’installazione separata di PowerShell versione 6, allora possiamo creare profili aggiuntivi. Due per l’utente corrente e due per tutti gli utenti.
# | Tipo di profilo | Comando | Host | Nome file profilo | Profilo Posizione del file |
---|---|---|---|---|---|
1 | CurrentUserCurrentHost | $profile | Console | Microsoft.PowerShell_profile.ps1 | $HOME\ Documents\PowerShell\ |
2 | CurrentUserAllHosts | $profile.CurrentUserAllHosts | profile.ps1 | $HOME\ Documents\PowerShell\ | |
3 | AllUsersCurrentHost | $profile.AllUsersCurrentHost | Console | Microsoft.PowerShell_profile.ps1 | $PSHOME\ |
4 | AllUsersAllHosts | $profile.AllUsersAllHosts | profile.ps1 | $PSHOME\ |
Tabella 2 – PowerShell v6 Tipi di profili, comandi, host, nomi di file, posizioni di file
Di solito, il valore per $HOME è C:\Users\user_name
Di solito, il valore per $PSHOME è C:\Program Files\PowerShell\6
NOTA: La differenza tra i nomi delle cartelle in Documents PowerShell v6 è PowerShell e le cartelle delle versioni precedenti PowerShell è WindowsPowerShell.
Come creare un profilo PowerShell passo dopo passo
Qui vi mostrerò esattamente come creare un profilo PowerShell.
Creazione di un profilo PowerShell per l’utente corrente e l’host corrente
Questo è il profilo PowerShell predefinito di Windows.
Segui questi passi per creare un profilo PowerShell per la Console come Host e utente corrente:
Passo 1: Apri la Console PowerShell di Windows (Host corrente).
Passo 2: Per prima cosa, controlleremo se il profilo esiste o meno nella nostra installazione PowerShell. Digita il seguente comando nella Console di Window PowerShell, e premi INVIO.
Test-Path $PROFILE
Ricorda: valore del parametro per Test-Path CmdLet otteniamo dalla Tabella 2 – colonna Comando. ($profilo, $profilo.CurrentUserAllHosts, ecc)
Passo 3: Se il risultato del comando precedente è falso, il profilo non esiste quindi vai al passo 4. Se il risultato è vero, il file di profilo esiste quindi vai al passo 5
Passo 4: Poiché il profilo non esiste ne creeremo uno con il seguente comando che digiterai e premerai INVIO.
New-Item -Type File -Force $PROFILE
Step 5: Il profilo è stato creato e possiamo aprire il file Profilo in PowerShell ISE con il seguente comando, e premere ENTER.
ise $PROFILE
Passo 6: Il file Profilo vuoto è stato aperto in Windows PowerShell ISE
Passo 7: Continua all’esempio 1 per vedere come personalizzare questo profilo.
Creazione di un profilo PowerShell per l’utente corrente e tutti gli host
Seguire questi passi per creare un profilo PowerShell:
Passo 1: Aprire la console Windows PowerShell (Questo è solo un host di scelta per eseguire i comandi e possiamo fare questi passi anche da Windows PowerShell ISE).
Passo 2: Per prima cosa, controlleremo se il profilo esiste o meno nella nostra installazione PowerShell. Digitare il seguente comando nella console di Window PowerShell, e premere INVIO.
Test-Path $PROFILE.CurrentUserAllHosts
Ricorda: valore del parametro per Test-Path CmdLet otteniamo dalla tabella 2 – colonna di comando. ($profilo, $profilo.CurrentUserAllHosts, ecc)
Passo 3: Se il risultato del comando precedente è falso, il profilo non esiste quindi vai al passo 4. Se il risultato è vero, il file di profilo esiste quindi vai al passo 5
Passo 4: Poiché il profilo non esiste ne creeremo uno con il seguente comando che digiterai e premerai INVIO.
New-Item -Type File -Force $PROFILE.CurrentUserAllHosts
Passo 5: Il profilo è stato creato e possiamo aprire il file profilo in PowerShell ISE con il seguente comando, e premere INVIO.
ise $PROFILE.CurrentUserAllHosts
Passo 6: Il file profilo vuoto è stato aperto in Windows PowerShell ISE
Passo 7: Continua all’esempio 2 per vedere come personalizzare il profilo.
Ripetiamo il processo per altri tipi di profilo l’unica cosa è usare il valore corretto della variabile nella colonna Command dalla Tabella 1 – PowerShell Profile types, commands, hosts, file names, file locations.
- $profile.AllUsersCurrentHost
- $profile.AllUsersAllHosts
Rimanere: Quando vuoi creare un profilo per Windows PowerShell ISE come host devi aprire Windows PowerShell ISE e seguire i passi eseguendo i comandi da Windows PowerShell ISE Console (guarda lo screenshot qui sotto)
Come modificare il profilo di Windows PowerShell con esempi
Esempio 1 – Profilo per Console come Host e Utente corrente (Utente corrente – Host corrente)
Nome profilo: Microsoft.PowerShell_profile.ps1
Localizzazione del profilo: $Home\Documents\WindowsPowerShell
Utilizzato per: In questo esempio, ho cambiato i colori dello sfondo del carattere per essere più leggibile.
Qui c’è il codice nel file di profilo Microsoft.PowerShell_profile.ps1. Basta copiare il codice nel file di profilo e salvare le modifiche per avere lo stesso schema di colori o personalizzarlo a proprio piacimento.
Set-PSReadLineOption -colors @{ Operator = 'Cyan' Parameter = 'Cyan' String = 'White'}
In alcuni vecchi sistemi l’impostazione di Set-PSReadLineOption CmdLet era un po’ diversa come nell’esempio seguente.
Set-PSReadlineOption -TokenKind String -ForegroundColor MagentaSet-PSReadlineOption -TokenKind Operator -ForegroundColor CyanSet-PSReadlineOption -TokenKind Parameter -ForegroundColor Cyan
I colori del font sono stati cambiati da questo…
… a questo.
Utilizza Get-PSReadLineOption CmdLet per vedere gli argomenti di colore validi e i valori degli argomenti correnti (colori).
Esempio 2 – Profilo per entrambi Windows PowerShell Console e ISE come host (Utente corrente – Tutti gli host)
Nome del profilo: profile.ps1
Localizzazione del profilo: $Home\Documents\WindowsPowerShell\
Usato per: Quando vuoi personalizzare sia Windows PowerShell Console che ISE simultaneamente o eseguire funzioni avanzate o CmdLets sia in PowerShell Console che in ISE.
In questo esempio, carico i miei moduli PowerShell per alcuni CmdLets che ho scritto e che fanno parte dell’Efficiency Booster PowerShell Project. Questo progetto è una libreria di miei CmdLets organizzati in diversi moduli e vi consiglio vivamente di scaricare il file zip dei file del progetto e testare nel vostro ambiente e potermi seguire negli articoli di questo blog.
Ecco i comandi per importare i moduli e il contenuto del file profilo.
Import-Module 02utilsImport-Module 03commonImport-Module 04maintenance
Possiamo testare rapidamente che i moduli importati siano realmente caricati quando apriamo la console PowerShell utilizzando il seguente comando:
Get-Module -ListAvailable
Per capire meglio PowerShell Profiles, Modules e CmdLets interlinking leggi il seguente sottotitolo di questo post How To Organize Your Own PowerShell CmdLets in PowerShell Modules And Which Profile To Use To Organize That Structure e How We Link Together PowerShell Profile, Module, And CmdLet.
Esempio 3 – Profilo per ISE come Host (Utente corrente – Host corrente)
Nome profilo: Microsoft.PowerShellISE_profile.ps1
Posizione del profilo: $Home\Documents\WindowsPowerShell
Utilizzato per: In questo esempio, ho importato il modulo che contiene CmdLets che sarà Add-ons per Window PowerShell ISE.
Ecco il comando che deve essere copiato nel file di profilo.
Import-Module 09addons
Come risultato, avremo due Add-ons in Windows PowerShell ISE. Leggete questi due articoli per sapere di più su come codificarli.
- Come scrivere funzioni avanzate o istruzioni con PowerShell (veloce)
- Come scrivere funzioni o istruzioni con PowerShell (veloce)
Possiamo testare rapidamente che i moduli importati siano realmente caricati quando apriamo la console PowerShell utilizzando il seguente comando:
Get-Module -ListAvailable
NOTA: Windows PowerShell ISE importa quattro modelli da due file profilo ( profilo.ps1 e Microsoft.PowerShellISE_profile.ps1 ).
Esempio 4 – Profilo sia per Windows PowerShell Console che per ISE come host (tutti gli utenti – tutti gli host)
Nome profilo: profile.ps1
Posizione profilo: $PSHOME\
Utilizzato per: In questo esempio, ho solo cambiato il titolo di Window PowerShell Console e ISE sia per l’utente corrente che per l’amministratore.
Ecco il codice nel file Profile:
$NTIdentity = ::GetCurrent()$NTPrincipal = new-object Security.Principal.WindowsPrincipal $NTIdentity$IsAdmin = $NTPrincipal.IsInRole(::Administrator)$hostversion="v$($Host.Version.Major).$($Host.Version.Minor)"$hostname = $host.NameIF ($IsAdmin){ if($hostname -eq "ConsoleHost") { $host.ui.RawUI.WindowTitle = "Your Text in Windows PowerShell $hostversion - Running as ADMINISTRATOR" } else { $host.ui.RawUI.WindowTitle = "Your Text in Windows PowerShell ISE $hostversion - Running as ADMINISTRATOR" }}Else{ if($hostname -eq "ConsoleHost") { $host.ui.RawUI.WindowTitle = "Your Text in Windows PowerShell $hostversion" } else { $host.ui.RawUI.WindowTitle = "Your Text in Windows PowerShell ISE $hostversion" }}
Puoi vedere che entrambi i titoli PowerShell Console e ISE hanno un testo personalizzato, il nome dell’host e la versione di PowerShell nel titolo.
Comandi PowerShell utili da conoscere riguardo ai profili
Qui ci sono alcuni utili comandi PowerShell che ti aiuteranno ad ottenere informazioni sui profili.
Come risultato dell’esecuzione di uno qualsiasi dei comandi di profilo, si otterrà la posizione del file di profilo.
$profile$profile.AllUsersCurrentHost$profile.CurrentUserAllHosts$profile.AllUsersAllHosts
IMPORTANTE: Quando vuoi trovare la posizione del file di profilo per Windows PowerShell ISE come host devi aprire Windows PowerShell ISE ed eseguire i comandi di profilo da Windows PowerShell ISE Console
Usa Test-Path CmdLet per controllare se il file di profilo esiste sul sistema o no. Se ottieni True come risultato il profilo esiste e false significa che il file di profilo non esiste. Usa i comandi dalla Tabella 1 – Tipi di profilo PowerShell, comandi, host, nomi di file, posizioni di file per controllare altri tipi di profilo se esistono o no.
Test-Path $PROFILE
Questa linea di codice creerà un file di profilo. Usa i comandi dalla Tabella 1 – Tipi di profilo PowerShell, comandi, host, nomi di file, posizioni di file per creare altri tipi di profilo.
New-Item -Type File -Force $PROFILE.CurrentUserAllHosts
Se vuoi leggere il contenuto del file di profilo in Notepad o in Window PowerShell ISE allora usa questi due comandi.
ise $PROFILEnotepad $PROFILE
Personalmente preferisco Windows PowerShell ISE poiché è un ambiente più conveniente per scrivere codice PowerShell.
Utilizza questa linea di codice per ottenere le posizioni dei profili per tutti i tipi di profilo.
$profile | Get-Member -Type NoteProperty | Select-Object Definition
Controlla queste due variabili per ottenere rispettivamente la posizione dell’installazione di PowerShell e della directory home.
$pshome$home
Come scegliere quale file di profilo usare
Se usi più applicazioni host come Windows PowerShell Console e ISE, metti tutte le personalizzazioni nel profilo $PROFILE.CurrentUserAllHosts per l’utente attualmente connesso. Per esempio, ho creato i miei CmdLets organizzati in Moduli quindi ho messo i comandi per caricare questi moduli in questo profilo poiché voglio che i moduli siano caricati sia quando apriamo PowerShell Console che ISE. Guarda l’esempio 2 per l’illustrazione.
Se vuoi fare una personalizzazione specifica per l’applicazione host metti tutto il codice di personalizzazione in un profilo specifico per quell’applicazione host. Per esempio, cambio il colore di sfondo dei caratteri della console PowerShell in modo che siano più visibili o ho caricato moduli che sono Add-ons per ISE. L’ho mostrato nell’esempio 1 per PowerShell Console e nell’esempio 3 per PowerShell ISE.
Se hai bisogno di personalizzare PowerShell per molti utenti e sei un amministratore, segui questi consigli:
- Memorizza la personalizzazione più comune in $PROFILE.AllUsersAllHosts poiché questo è il profilo più ampio
- Se vuoi personalizzare Windows PowerShell per tutti gli utenti ma in modo specifico per un’applicazione host. Per esempio, una personalizzazione diversa per Windows PowerShell Console e un’altra personalizzazione per Windows PowerShell ISE allora metti il codice nei profili $PROFILE.AllUsersCurrentHost
- Scrivi il codice per utenti particolari nei profili specifici dell’utente. Fondamentalmente, questo significa usare il profilo $PROFILE.CurrentUserAllHosts o $PROFILE.CurrentUserCurrentHost.
Come eseguire Console o ISE senza profili caricati
Aprire il dialogo di esecuzione Win + R e aprire PowerShell con l’opzione -NoProfile.
PowerShell.exe -NoProfile
Attenzione: PowerShell Load Time
Con un profilo più grande e complesso, può iniziare ad avere un effetto sulla velocità di apertura di PowerShell. Per risolvere se il tuo profilo è responsabile dei tempi di caricamento di PowerShell insufficienti, apri il dialogo di esecuzione Win + R e apri PowerShell con l’opzione -NoProfile.
PowerShell.exe -NoProfile
Profili e sessioni remote
I profili PowerShell non vengono eseguiti automaticamente nelle sessioni remote, quindi i comandi che i profili aggiungono non sono presenti nella sessione remota. Inoltre, la variabile automatica $PROFILE non è popolata nelle sessioni remote.
Per eseguire un profilo in una sessione, usate il comando Invoke-Command CmdLet.
Per esempio, il seguente comando esegue il profilo “Current user, Current Host” dal computer locale nella sessione in $s.
Invoke-Command -Session $s -FilePath $PROFILE
Come organizzare i propri CmdLet PowerShell in Moduli e Profili PowerShell
Per farti capire il legame tra Profilo PowerShell, Modulo e CmdLet ho creato un progetto Efficiency Booster PowerShell con molti dei miei CmdLet organizzati in un mucchio di Moduli che vengono caricati in ogni sessione PowerShell con il profilo PowerShell ogni volta che apro Windows PowerShell Console o ISE.
Sentitevi liberi di scaricare il file zip che contiene il codice del progetto in modo da poterlo seguire facilmente. Nel file ReadMe.txt c’è una spiegazione dei passi di installazione e personalizzazione quindi per favore leggi le istruzioni in quel file. Ancora meglio puoi leggere le istruzioni di installazione e personalizzazione leggendo il seguente articolo How To Install And Configure PowerShell: CmdLet, Moduli, Profili.
Utilizzerò l’analogia libreria, scaffali e libri per spiegare il legame tra Powershell Profilo, Modulo e CmdLet.
Per esempio, immaginate di voler imparare di più su PowerShell Scripting e di voler comprare alcuni libri sull’argomento dalla libreria.
Entri nella libreria e vedi molti scaffali con diverse etichette per dipartimenti di libri come Arte, Business, Computer, Letteratura, Viaggi, ecc. Naturalmente, vai verso gli scaffali etichettati Computer e lì trovi il libro che spiega PowerShell Scripting che vuoi comprare.
Torniamo ora al mondo PowerShell e colleghiamo la storia dell’analogia con PowerShell:
- Il CmdLet che usiamo fornito con PowerShell o qualche nostro CmdLet scritto è il libro.
- Il codice di quel CmdLet è il contenuto del libro.
- PowerShell Module è lo scaffale della libreria di qualche reparto della libreria come per esempio lo scaffale della libreria Computers dove è messo il nostro libro.
- Infine, PowerShell Profile è la libreria stessa.
Così ogni volta che apriamo Windows PowerShell Console o ISE apriamo la nostra sessione e con quella sessione i file di profilo da caricare e personalizzare sono stati fatti per impostare il nostro ambiente PowerShell nel modo in cui vogliamo essere.
Nel caso di Moduli e CmdLets. Il file di profilo importerà i moduli e il modulo caricherà ogni script CmdLet che appartiene a quel modulo.
Siccome mi piace usare i miei CmdLet sia in Windows PowerShell Console che nelle applicazioni host ISE preferisco creare un $profile.CurrentUserAllHosts che non è altro che il file Profile.ps1 creato in:
- $Home\ Documents\WindowsPowerShell\ per PowerShell versione 5.1 e precedenti
- $Home\ Documents\PowerShell\ per PowerShell versione 6.0.
Come colleghiamo insieme PowerShell Profile, Module, e CmdLet
Ecco una breve descrizione di questa struttura fatta in PowerShell
- Crea un profilo PowerShell
- Crea una cartella Module e una struttura di file
- Personalizza il profilo per importare i moduli necessari
- Crea lo script PowerShell CmdLet
- Scrivi il codice della funzione CmdLet
- Personalizza il file Module per importare lo script CmdLet
Io illustrerò questo processo con esempi di Efficiency Booster PowerShell Project di Profile, Moduli e CmdLet in modo che sia più facile per chiunque capire l’intero processo. Quindi incoraggio ancora una volta tutti a installare il file zip fornito.
Segui questi passi per creare un profilo PowerShell, un modulo, un CmdLet e collegarli insieme:
Passo 1: Aprire la console Windows PowerShell
Passo 2: Per prima cosa, controlleremo se il profilo esiste o meno nella nostra installazione PowerShell. Digita il seguente comando in Window PowerShell, e premi INVIO
Test-Path $PROFILE.CurrentUserAllHosts
Passo 3: Se il risultato del comando precedente è falso, il profilo non esiste quindi vai al passo 4. Se il risultato è vero, il file di profilo esiste quindi vai al passo 5
Passo 4: Dato che il profilo non esiste ne creeremo uno con il seguente comando che digiterai e premerai INVIO.
New-Item -Type File -Force $PROFILE.CurrentUserAllHosts
Passo 5: Il profilo è stato creato e possiamo aprire il file Profilo in PowerShell ISE con il seguente comando, e premere INVIO.
ise $PROFILE.CurrentUserAllHosts
Passo 6: Il file Profile è stato aperto in PowerShell ISE.
Passo 7: Ora dobbiamo creare una struttura di cartelle Module e i file necessari.
Passo 8: Nella cartella dove abbiamo creato il nostro file Profile creare una cartella Module con il nome esatto Modules. Qui terremo la struttura delle cartelle di tutti i nostri Moduli.
Step 9: Nella cartella Moduli crea le cartelle per ogni Modulo che vuoi avere. Per esempio, ho creato i seguenti moduli in Efficiency Booster PowerShell Project.
Step 10: In ogni cartella Module creiamo il file con estensione .psm1 e lo stesso nome esatto della cartella Module. Per esempio, nella cartella 03common, creiamo il file 03common.psm1
Passo 11: Opzionalmente possiamo creare un file manifest (.psd1) per ogni modulo che descriverà ulteriormente quella cartella.
Step 12: Nella stessa cartella del modulo, creiamo il file con estensione .ps1 (Regular PowerShell script file) dove scriveremo il codice per il nostro CmdLet. Per esempio, possiamo creare il file GetCPUInfo.ps1 dove scriveremo il codice per il nostro Get-CPUInfo CmdLet.
Step 13: Ora siamo pronti per scrivere il nostro codice CmdLet e scriverlo. Sentiti libero di guardare l’esempio Get-CPUInfo e altri CmdLet del progetto Efficiency Booster PowerShell. Nei post futuri, scriverò più dettagliatamente su ogni CmdLet del progetto. Per ora, scarica il codice sorgente del progetto qui.
Step 14: Collega uno script CmdLet al modulo PowerShell corretto. Apri il file .psm1 del modulo e scrivi questa linea di codice:
. $psScriptRoot\NameOfCmdLetScriptFile.ps1
Per esempio, per Get-CPUInfo CmdLet scriviamo questa linea di codice nel file 03common.psm1 file:
. $psScriptRoot\GetCPUInfo.ps1
Passo 15: Nel file script Profilo, importiamo il Modulo che contiene il nostro file script CmdLet quindi scriviamo questo comando nel file profilo.
Import-Module ModuleName
Per esempio, il nostro Get-CPUInfo CmdLet fa parte del modulo 03common quindi scriviamo questo codice nel profilo:
Import-Module 03common
Step 16: Ripetiamo i passi 9 -15 per ogni Modulo e CmdLet che vogliamo avere nel nostro profilo e che venga caricato con ogni sessione PowerShell che avviamo.
Step 17: Testiamo che tutti i moduli importati sono caricati quando apriamo un certo host. Possiamo elencare i moduli usando il seguente comando:
Get-Module -ListAvailable
Step 18: Possiamo testare che tutti i CmdLets all’interno di ogni modulo siano caricati nell’ambiente. Ecco il comando di esempio utile:
Get-Command -Module 02utils