Dela via


Anpassa din shell-miljö

En PowerShell-profil är ett skript som körs när PowerShell startar. Du kan använda profilen för att anpassa miljön. Du kan:

  • Lägga till alias, funktioner och variabler
  • Ladda moduler
  • Skapa PowerShell-enheter
  • Köra godtyckliga kommandon
  • Ändra inställningsinställningar

Om du placerar de här inställningarna i din profil ser du till att de är tillgängliga när du startar PowerShell i systemet.

Anmärkning

Om du vill köra skript i Windows måste PowerShell-körningspolicy vara inställd på RemoteSigned som ett minimum. Körningsprinciper gäller inte för macOS och Linux. Mer information finns i about_Execution_Policy.

Variabeln $PROFILE

Den $PROFILE automatiska variabeln lagrar sökvägarna till de PowerShell-profiler som är tillgängliga i den aktuella sessionen.

Det finns fyra tillgängliga profiler som stöder olika användaromfattningar och olika PowerShell-värdar. De fullständigt kvalificerade sökvägarna för varje profilskript lagras i följande medlemsegenskaper för $PROFILE.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

Du kan skapa profilskript som körs för alla användare eller bara en användare, CurrentUser. CurrentUser-profiler lagras under användarens hemkatalogsökväg. Platsen varierar beroende på vilket operativsystem och vilken version av PowerShell du använder.

Om du refererar till variabeln $PROFILE returneras som standard sökvägen till profilen "Aktuell användare, aktuell värd". Den andra profilsökvägen kan nås via egenskaperna för variabeln $PROFILE . Följande kommando visar standardprofilplatserna i 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

Följande kommando visar standardprofilplatserna i 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

Det finns också profiler som körs för alla PowerShell-värdar eller specifika värdar. Profilskriptet för varje PowerShell-värd har ett namn som är unikt för den värden. Till exempel är filnamnet för standardkonsolvärden på Windows eller standardterminalprogrammet på andra plattformar Microsoft.PowerShell_profile.ps1. För Visual Studio Code (VS Code) är Microsoft.VSCode_profile.ps1filnamnet .

Mer information finns i about_Profiles.

Så här skapar du din personliga profil

När du först installerar PowerShell på ett system finns inte profilskriptfilerna och de kataloger som de tillhör. Följande kommando skapar profilskriptfilen "Aktuell användare, aktuell värd" om den inte finns.

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

Force-parametern för cmdleten skapar de nödvändiga mapparna när de inte finns.New-Item När du har skapat skriptfilen kan du använda din favoritredigerare för att anpassa shell-miljön.

Lägga till anpassningar i din profil

I de föregående artiklarna talades det om att använda tabbavslut, kommandoförsägare och alias. De här artiklarna visade de kommandon som används för att läsa in de moduler som krävs, skapa anpassade kompletteringar, definiera nyckelbindningar och andra inställningar. Det här är de typer av anpassningar som du vill ha tillgängliga i varje interaktiv PowerShell-session. Profilskriptet är platsen för de här inställningarna.

Det enklaste sättet att redigera ditt profilskript är att öppna filen i din favoritkodredigerare. Följande kommando öppnar till exempel profilen i VS Code.

code $PROFILE

Du kan också använda notepad.exe i Windows, vi i Linux eller någon annan textredigerare.

Följande profilskript innehåller exempel på många av de anpassningar som nämns i föregående artiklar. Du kan använda någon av de här inställningarna i din egen 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

Det här profilskriptet innehåller exempel på följande anpassning:

  • Lägger till två nya PSDrives för de andra rotregisterkuporna.
  • Skapar en anpassad uppmaning som ändras om du kör i en förhöjd session.
  • Konfigurerar PSReadLine och lägger till nyckelbindning. Färginställningarna använder funktionen $PSStyle för att definiera inställningarna för ANSI-färg.
  • Lägger till flikavslut för dotnet CLI-verktyget . Verktyget innehåller parametrar som hjälper dig att lösa kommandoradsargumenten. Skriptblocket för Register-ArgumentCompleter använder den funktionen för att tillhandahålla flikens slutförande.