Sdílet prostřednictvím


Přizpůsobení shellového prostředí

Profil PowerShellu je skript, který se spustí při spuštění PowerShellu. Profil můžete použít k přizpůsobení prostředí. Můžete:

  • Přidání aliasů, funkcí a proměnných
  • Načtení modulů
  • Vytvoření diskových jednotek PowerShell
  • Spuštění libovolných příkazů
  • Změna nastavení předvoleb

Umístěním těchto nastavení do profilu zajistíte, že budou k dispozici při každém spuštění PowerShellu ve vašem systému.

Poznámka:

Aby bylo možné spouštět skripty ve Windows, musí být zásady spouštění PowerShellu nastaveny na RemoteSigned minimálně. Zásady spouštění se nevztahují na macOS a Linux. Další informace najdete v části about_Execution_Policy.

Proměnná $PROFILE

Automatická proměnná $PROFILE ukládá cesty k profilům PowerShellu, které jsou k dispozici v aktuální relaci.

K dispozici jsou čtyři možné profily pro podporu různých oborů uživatelů a různých hostitelů PowerShellu. Plně kvalifikované cesty pro každý skript profilu jsou uloženy v následujících vlastnostech členů $PROFILE.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • AktuálníUživatelAktuálníHostitel

Můžete vytvořit skripty profilu, které běží pro všechny uživatele nebo pouze pro jednoho uživatele, CurrentUser. profily aktuálního uživatele jsou uloženy v domovské složce uživatele. Umístění se liší v závislosti na operačním systému a verzi PowerShellu, kterou používáte.

Ve výchozím nastavení odkazování na proměnnou $PROFILE vrací cestu k profilu "Aktuální uživatel, Aktuální hostitel". Cesta k ostatním profilům je přístupná prostřednictvím vlastností proměnné $PROFILE. Následující příkaz zobrazí výchozí umístění profilu ve 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

Následující příkaz zobrazí výchozí umístění profilů v Ubuntu Linuxu.

$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

Existují také profily, které se spouštějí pro všechny hostitele PowerShellu nebo konkrétní hostitele. Skript profilu pro každého hostitele PowerShellu má jedinečný název pro daného hostitele. Například název souboru standardního hostitele konzoly ve Windows nebo výchozí terminálová aplikace na jiných platformách je Microsoft.PowerShell_profile.ps1. Pro Visual Studio Code (VS Code) je název souboru Microsoft.VSCode_profile.ps1.

Další informace najdete v tématu about_Profiles.

Vytvoření osobního profilu

Při první instalaci PowerShellu na systém neexistují soubory skriptu profilu ani adresáře, ke kterým patří. Následující příkaz vytvoří soubor skriptu profilu "Aktuální uživatel, Aktuální hostitel", pokud neexistuje.

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

Parametr Force cmdletu New-Item vytvoří potřebné složky, pokud neexistují. Po vytvoření souboru skriptu můžete pomocí svého oblíbeného editoru přizpůsobit své shellové prostředí.

Přidání vlastních nastavení do profilu

Předchozí články mluvily o použití dokončení tabulátoru , prediktorů příkazů a aliasů . Tyto články ukázaly příkazy používané k načtení požadovaných modulů, vytváření vlastních completerů, definování klíčových vazeb a dalších nastavení. Jedná se o druhy přizpůsobení, které chcete mít k dispozici v každé interaktivní relaci PowerShellu. Skript profilu je místem pro tato nastavení.

Nejjednodušší způsob, jak upravit váš profilový skript, je otevřít soubor v oblíbeném editoru kódu. Například následující příkaz otevře profil v VS Code.

code $PROFILE

Můžete také použít notepad.exe ve Windows, vi v Linuxu nebo jiném textovém editoru.

Následující skript profilu obsahuje příklady pro řadu přizpůsobení uvedených v předchozích článcích. V libovolném z těchto nastavení můžete použít vlastní profil.

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

Tento skript profilu obsahuje příklady pro následující přizpůsobení:

  • Přidá dva nové PSDrives pro ostatní podregistry kořenového registru.
  • Vytvoří přizpůsobenou výzvu, která se změní, pokud používáte relaci s rozšířenými oprávněními.
  • Nakonfiguruje PSReadLine a přidá vazbu klíče. Nastavení barev používá funkci $PSStyle k definování nastavení barvy ANSI.
  • Přidá dokončování tabulátoru pro nástroj rozhraní příkazového řádku dotnet. Nástroj poskytuje parametry, které vám pomůžou vyřešit argumenty příkazového řádku. Blok skriptu pro Register-ArgumentCompleter používá tuto funkci k zadání dokončování tabulátoru.