Personalizzazione dell'ambiente della shell
Un profilo di PowerShell è uno script eseguito all'avvio di PowerShell. È possibile usare il profilo per personalizzare l'ambiente. È possibile:
- Aggiungere alias, funzioni e variabili
- Caricare moduli
- Creare unità di PowerShell
- Eseguire comandi arbitrari
- Modificare le impostazioni delle preferenze
L'inserimento di queste impostazioni nel profilo garantisce che siano disponibili ogni volta che si avvia PowerShell nel sistema.
Nota
Per eseguire script in Windows, i criteri di esecuzione di PowerShell devono essere impostati su RemoteSigned
almeno. I criteri di esecuzione non si applicano a macOS e Linux. Per altre informazioni, vedere about_Execution_Policy.
La variabile $PROFILE
La variabile $PROFILE
automatica archivia i percorsi dei profili di PowerShell disponibili nella sessione corrente.
Sono disponibili quattro profili possibili per supportare ambiti utente diversi e diversi host di PowerShell. I percorsi completi per ogni script del profilo vengono archiviati nelle proprietà membro seguenti di $PROFILE
.
- TuttiGliUtentiTuttiGliHost
- AllUsersCurrentHost
- UtenteCorrenteTuttiGliHost
- CurrentUserCurrentHost
È possibile creare script di profilo eseguiti per tutti gli utenti o solo un utente, CurrentUser. I profili di CurrentUser vengono archiviati nel percorso della directory personale dell'utente. La posizione varia a seconda del sistema operativo e della versione di PowerShell che utilizzi.
Per impostazione predefinita, fare riferimento alla variabile $PROFILE
restituisce il percorso del profilo "Current User, Current Host". È possibile accedere all'altro percorso dei profili tramite le proprietà della variabile $PROFILE
.
Il comando seguente mostra i percorsi predefiniti del profilo in Windows.
PS> $PROFILE | Select-Object *
AllUsersAllHosts : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\username\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\username\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Length : 69
Il comando seguente mostra i percorsi predefiniti del profilo in Ubuntu Linux.
$PROFILE | Select-Object *
AllUsersAllHosts : /opt/microsoft/powershell/7/profile.ps1
AllUsersCurrentHost : /opt/microsoft/powershell/7/Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : /home/username/.config/powershell/profile.ps1
CurrentUserCurrentHost : /home/username/.config/powershell/Microsoft.PowerShell_profile.ps1
Length : 67
Sono disponibili anche profili eseguiti per tutti gli host di PowerShell o per host specifici. Lo script del profilo per ogni host di PowerShell ha un nome univoco per tale host. Ad esempio, il nome file per l'host della console standard in Windows o l'applicazione terminale predefinita in altre piattaforme è Microsoft.PowerShell_profile.ps1
. Per Visual Studio Code (VS Code), il nome file è Microsoft.VSCode_profile.ps1
.
Per altre informazioni, vedere about_Profiles.
Come creare il profilo personale
Quando si installa PowerShell per la prima volta in un sistema, i file di script del profilo e le directory a cui appartengono non esistono. Il comando seguente crea il file di script del profilo "Utente corrente, Host corrente" se non esiste.
if (!(Test-Path -Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}
Il parametro Force del cmdlet New-Item
crea le cartelle necessarie quando non esistono.
Dopo aver creato il file di script, è possibile usare l'editor preferito per personalizzare l'ambiente della shell.
Personalizzare il profilo
Negli articoli precedenti è stato illustrato l'uso del completamento tab , dei predittori di comando e degli alias. Questi articoli illustrano i comandi usati per caricare i moduli necessari, creare completer personalizzati, definire le associazioni di tasti e altre impostazioni. Questi sono i tipi di personalizzazioni che si desidera avere a disposizione in ogni sessione interattiva di PowerShell. Lo script del profilo è il luogo ideale per queste impostazioni.
Il modo più semplice per modificare lo script del profilo consiste nell'aprire il file nell'editor di codice preferito. Ad esempio, il comando seguente apre il profilo in VS Code.
code $PROFILE
È anche possibile usare notepad.exe
in Windows, vi
in Linux o in qualsiasi altro editor di testo.
Lo script del profilo seguente include esempi per molte delle personalizzazioni menzionate negli articoli precedenti. È possibile usare una di queste impostazioni nel proprio profilo.
## Map PSDrives to other registry hives
if (!(Test-Path HKCR:)) {
$null = New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
$null = New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS
}
## Customize the prompt
function prompt {
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = [Security.Principal.WindowsPrincipal] $identity
$adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator
$prefix = if (Test-Path Variable:/PSDebugContext) { '[DBG]: ' } else { '' }
if ($principal.IsInRole($adminRole)) {
$prefix = "[ADMIN]:$prefix"
}
$body = 'PS ' + $PWD.path
$suffix = $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
"${prefix}${body}${suffix}"
}
## Create $PSStyle if running on a version older than 7.2
## - Add other ANSI color definitions as needed
if ($PSVersionTable.PSVersion.ToString() -lt '7.2.0') {
# define escape char since "`e" may not be supported
$esc = [char]0x1b
$PSStyle = [pscustomobject]@{
Foreground = @{
Magenta = "${esc}[35m"
BrightYellow = "${esc}[93m"
}
Background = @{
BrightBlack = "${esc}[100m"
}
}
}
## Set PSReadLine options and keybindings
$PSROptions = @{
ContinuationPrompt = ' '
Colors = @{
Operator = $PSStyle.Foreground.Magenta
Parameter = $PSStyle.Foreground.Magenta
Selection = $PSStyle.Background.BrightBlack
InLinePrediction = $PSStyle.Foreground.BrightYellow + $PSStyle.Background.BrightBlack
}
}
Set-PSReadLineOption @PSROptions
Set-PSReadLineKeyHandler -Chord 'Ctrl+f' -Function ForwardWord
Set-PSReadLineKeyHandler -Chord 'Enter' -Function ValidateAndAcceptLine
## Add argument completer for the dotnet CLI tool
$scriptblock = {
param($wordToComplete, $commandAst, $cursorPosition)
dotnet complete --position $cursorPosition $commandAst.ToString() |
ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock
Questo script di profilo fornisce esempi per la personalizzazione seguente:
- Aggiunge due nuovi PSDrives per gli altri hive principali del Registro di sistema.
- Crea un prompt personalizzato che cambia se lo esegui in una sessione con privilegi elevati.
- Configura PSReadLine e aggiunge un'associazione di tasti. Le impostazioni dei colori usano la funzionalità di $PSStyle per definire le impostazioni dei colori ANSI.
- Aggiunge il completamento tramite tabulazione per lo strumento dell'interfaccia a riga di comando di dotnet . Lo strumento fornisce parametri per risolvere gli argomenti della riga di comando. Il blocco di script per Register-ArgumentCompleter usa tale funzionalità per fornire il completamento della scheda.