Sdílet prostřednictvím


Přizpůsobení 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 provádět následující akce:

  • přidání aliasů, funkcí a proměnných
  • moduly zatížení
  • vytvoření jednotek PowerShellu
  • Spuštění libovolných příkazů
  • a změnit 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 nastavené minimálně na RemoteSigned minimum. Zásady spouštění se nevztahují na macOS a Linux. Další informace najdete v tématu about_Execution_Policy.

Proměnná $PROFILE

Automatická $PROFILE proměnná 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 členu .$PROFILE

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

Můžete vytvořit skripty profilu, které se spouštějí pro všechny uživatele nebo jen pro jednoho uživatele– CurrentUser. Profily CurrentUser jsou uloženy v domovském adresáři uživatele.

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 Microsoft.VSCode_profile.ps1název souboru .

Další informace najdete v tématu about_Profiles.

Ve výchozím nastavení vrátí odkaz na $PROFILE proměnnou cestu k profilu Aktuální uživatel, Aktuální hostitel. K další cestě profilů je možné přistupovat prostřednictvím vlastností $PROFILE proměnné. Příklad:

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

Vytvoření osobního profilu

Při první instalaci PowerShellu do systému soubory skriptu profilu a adresáře, které patří, neexistují. 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 rutiny New-Item vytvoří potřebné složky, pokud neexistují. Po vytvoření souboru skriptu můžete pomocí oblíbeného editoru přizpůsobit prostředí.

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

Předchozí články mluvily o použití dokončování tabulátoru, vysvětlujících příkazů a aliasů. Tyto články ukázaly příkazy použité k načtení požadovaných modulů, vytváření vlastních completerů, definování klávesový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 ve 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é psDrive pro ostatní podregistry kořenového registru.
  • Vytvoří přizpůsobenou výzvu , která se změní, pokud používáte relaci se zvýšenými oprávněními.
  • Nakonfiguruje PSReadLine a přidá klávesové zkratky. 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.