Dostosowywanie środowiska powłoki

Profil programu PowerShell to skrypt uruchamiany po uruchomieniu programu PowerShell. Możesz użyć profilu, aby dostosować środowisko. Oto co możesz zrobić:

  • dodawanie aliasów, funkcji i zmiennych
  • ładowanie modułów
  • tworzenie dysków programu PowerShell
  • uruchamianie dowolnych poleceń
  • i zmień ustawienia preferencji

Umieszczenie tych ustawień w profilu gwarantuje, że są one dostępne za każdym razem, gdy uruchomisz program PowerShell w systemie.

Uwaga

Aby uruchamiać skrypty w systemie Windows, należy ustawić zasady wykonywania programu PowerShell na RemoteSigned co najmniej. Zasady wykonywania nie mają zastosowania do systemów macOS i Linux. Aby uzyskać więcej informacji, zobacz about_Execution_Policy.

Zmienna $PROFILE

Zmienna automatyczna $PROFILE przechowuje ścieżki do profilów programu PowerShell, które są dostępne w bieżącej sesji.

Istnieją cztery możliwe profile do obsługi różnych zakresów użytkowników i różnych hostów programu PowerShell. W pełni kwalifikowane ścieżki dla każdego skryptu profilu są przechowywane we następujących właściwościach elementu członkowskiego .$PROFILE

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

Możesz utworzyć skrypty profilu uruchamiane dla wszystkich użytkowników lub tylko jednego użytkownika — CurrentUser. Profile CurrentUser są przechowywane w katalogu głównym użytkownika.

Istnieją również profile uruchamiane dla wszystkich hostów programu PowerShell lub określonych hostów. Skrypt profilu dla każdego hosta programu PowerShell ma unikatową nazwę dla tego hosta. Na przykład nazwa pliku standardowego hosta konsoli w systemie Windows lub domyślna aplikacja terminalowa na innych platformach to Microsoft.PowerShell_profile.ps1. W przypadku Visual Studio Code (VS Code) nazwa pliku to Microsoft.VSCode_profile.ps1.

Aby uzyskać więcej informacji, zobacz about_Profiles.

Domyślnie odwołanie do zmiennej $PROFILE zwraca ścieżkę do profilu "Bieżący użytkownik, bieżący host". Dostęp do innych ścieżek profilów można uzyskać za pośrednictwem właściwości zmiennej $PROFILE . Przykład:

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

Jak utworzyć profil osobisty

Po pierwszym zainstalowaniu programu PowerShell w systemie pliki skryptów profilu i katalogi, do których należą, nie istnieją. Następujące polecenie tworzy plik skryptu skryptu profilu "Bieżący użytkownik, bieżący host", jeśli nie istnieje.

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

Parametr ForceNew-Item polecenia cmdlet tworzy niezbędne foldery, gdy nie istnieją. Po utworzeniu pliku skryptu możesz użyć ulubionego edytora, aby dostosować środowisko powłoki.

Dodawanie dostosowań do profilu

W poprzednich artykułach omówiono używanie uzupełniania kart, predyktorów poleceń i aliasów. W tych artykułach pokazano polecenia używane do ładowania wymaganych modułów, tworzenia niestandardowych uzupełniania, definiowania powiązania kluczy i innych ustawień. Są to rodzaje dostosowań, które mają być dostępne w każdej sesji interaktywnej programu PowerShell. Skrypt profilu jest miejscem dla tych ustawień.

Najprostszym sposobem edytowania skryptu profilu jest otwarcie pliku w ulubionym edytorze kodu. Na przykład następujące polecenie otwiera profil w programie VS Code.

code $PROFILE

Można również użyć notepad.exe w systemie Windows, vi w systemie Linux lub innym edytorze tekstów.

Poniższy skrypt profilu zawiera przykłady dla wielu dostosowań wymienionych w poprzednich artykułach. Możesz użyć dowolnego z tych ustawień we własnym profilu.

## 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
}

## 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

Ten skrypt profilu zawiera przykłady dla następującego dostosowania:

  • Dodaje dwa nowe dyski PSDrive dla innych gałęzi rejestru głównego.
  • Tworzy dostosowany monit, który zmienia się w przypadku uruchomienia w sesji z podwyższonym poziomem uprawnień.
  • Konfiguruje element PSReadLine i dodaje powiązanie kluczy. Ustawienia kolorów używają funkcji $PSStyle do definiowania ustawień koloru ANSI.
  • Dodaje uzupełnianie kart dla narzędzia interfejsu wiersza polecenia dotnet . Narzędzie udostępnia parametry ułatwiające rozpoznawanie argumentów wiersza polecenia. Blok skryptu dla elementu Register-ArgumentCompleter używa tej funkcji do zapewnienia ukończenia karty.