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
  • e 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 RemoteSigned su almeno. I criteri di esecuzione non si applicano a macOS e Linux. Per altre informazioni, vedere about_Execution_Policy.

Variabile $PROFILE

La $PROFILE variabile 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.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

È possibile creare script di profilo eseguiti per tutti gli utenti o solo un utente, CurrentUser. I profili CurrentUser vengono archiviati nella home directory dell'utente.

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.

Per impostazione predefinita, facendo riferimento alla $PROFILE variabile viene restituito il percorso del profilo "Current User, Current Host". È possibile accedere all'altro percorso dei profili tramite le proprietà della $PROFILE variabile. Ad esempio:

PS> $PROFILE
C:\Users\user1\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
PS> $PROFILE.AllUsersAllHosts
C:\Program Files\PowerShell\7\profile.ps1

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 "Current User, Current Current Host" se non esiste.

if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}

Il parametro Force del New-Item cmdlet 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.

Aggiunta di personalizzazioni al profilo

Gli articoli precedenti illustravano l'uso del completamento tramite tabulazione, i predittori dei comandi e gli alias. Questi articoli illustrano i comandi usati per caricare i moduli necessari, creare completer personalizzati, definire tasti di scelta rapida 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 è la posizione 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]: ' }
                elseif ($principal.IsInRole($adminRole)) { "[ADMIN]: " }
                else { '' })
    $body = 'PS ' + $(Get-Location)
    $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 PSDrive per gli altri hive del Registro di sistema radice.
  • Crea un prompt personalizzato che cambia se si esegue in una sessione con privilegi elevati.
  • Configura PSReadLine e aggiunge il keybinding. 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 della riga di comando 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.