Freigeben über


Anpassen der Shellumgebung

Ein PowerShell-Profil ist ein Skript, das ausgeführt wird, wenn PowerShell gestartet wird. Sie können das Profil verwenden, um die Umgebung anzupassen. Du hast folgende Möglichkeiten:

  • Hinzufügen von Aliasen, Funktionen und Variablen
  • Laden von Modulen
  • Erstellen von PowerShell-Laufwerken
  • Ausführen beliebiger Befehle
  • Ändern von Einstellungen

Wenn Sie diese Einstellungen in Ihrem Profil einfügen, wird sichergestellt, dass sie beim jeden Start von PowerShell auf Ihrem System verfügbar sind.

Hinweis

Zum Ausführen von Skripts in Windows muss die PowerShell-Ausführungsrichtlinie mindestens auf mindestens RemoteSigned festgelegt werden. Ausführungsrichtlinien gelten nicht für macOS und Linux. Weitere Informationen finden Sie unter about_Execution_Policy.

Die $PROFILE-Variable

Die automatische Variable $PROFILE speichert die Pfade zu den PowerShell-Profilen, die in der aktuellen Sitzung verfügbar sind.

Es gibt vier mögliche Profile, um verschiedene Benutzerbereiche und verschiedene PowerShell-Hosts zu unterstützen. Die vollqualifizierten Pfade für jedes Profilskript werden in den folgenden Membereigenschaften von $PROFILE gespeichert.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

Sie können Profilskripts erstellen, die für alle Benutzer*innen oder nur eine*n Benutzer*in, currentUser, ausgeführt werden. CurrentUser-Profile werden im Startverzeichnis des Benutzers oder der Benutzerin gespeichert.

Es gibt auch Profile, die für alle PowerShell-Hosts oder bestimmte Hosts ausgeführt werden. Das Profilskript für jeden PowerShell-Host weist einen eindeutigen Namen für diesen Host auf. Beispielsweise lautet der Dateiname für den Standardkonsolenhost unter Windows oder die Standardterminalanwendung auf anderen Plattformen Microsoft.PowerShell_profile.ps1. Für Visual Studio Code (VS Code) lautet der Dateiname Microsoft.VSCode_profile.ps1.

Weitere Informationen finden Sie unter about_Profiles.

Standardmäßig gibt der Verweis auf die Variable $PROFILE den Pfad zum Profil „Current User, Current Host“ zurück. Auf den anderen Profilpfad kann über die Eigenschaften der $PROFILE-Variablen zugegriffen werden. Beispiel:

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

So erstellen Sie Ihr persönliches Profil

Wenn Sie PowerShell zum ersten Mal auf einem System installieren, sind die Profilskriptdateien und die Verzeichnisse, zu denen sie gehören, nicht vorhanden. Der folgende Befehl erstellt die Profilskriptdatei „Current User, Current Current Host“, wenn sie nicht vorhanden ist.

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

Der Parameter Force des New-Item-Cmdlets erstellt die erforderlichen Ordner, wenn sie nicht vorhanden sind. Nachdem Sie die Skriptdatei erstellt haben, können Sie Ihren bevorzugten Editor verwenden, um Ihre Shellumgebung anzupassen.

Hinzufügen von Anpassungen zu Ihrem Profil

In den vorherigen Artikeln wurde über die Verwendung der Registerkartenvervollständigen, von Befehlsvorhersagen und Aliasen gesprochen. In diesen Artikeln wurden die Befehle gezeigt, die zum Laden der erforderlichen Module, zum Erstellen benutzerdefinierter Completer, zum Definieren von Keybindings und andere Einstellungen verwendet wurden. Dies sind die Arten von Anpassungen, die Sie in jeder interaktiven PowerShell-Sitzung verfügbar sein sollten. Das Profilskript ist der Ort für diese Einstellungen.

Die einfachste Möglichkeit zum Bearbeiten Ihres Profilskripts besteht darin, die Datei im bevorzugten Code-Editor zu öffnen. Über den folgenden Befehl wird beispielsweise das Profil in VS Code geöffnet.

code $PROFILE

Sie können notepad.exe auch unter Windows, vi unter Linux oder in einem beliebigen anderen Text-Editor verwenden.

Das folgende Profilskript enthält Beispiele für viele der in den vorherigen Artikeln erwähnten Anpassungen. Sie können eine dieser Einstellungen in Ihrem eigenen Profil verwenden.

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

Dieses Profilskript enthält Beispiele für die folgende Anpassung:

  • Fügt zwei neue PSDrives für die anderen Stammregistrierungsstruktur hinzu
  • Erstellt eine angepasste Eingabeaufforderung, die sich ändert, wenn Sie eine Sitzung mit erhöhten Rechten ausführen
  • Konfiguriert PSReadLine und fügt keybinding hinzu Die Farbeinstellungen verwenden das $PSStyle-Feature, um die ANSI-Farbeinstellungen zu definieren.
  • Fügt Registerkartenvervollständigung für das dotnet CLI-Tool hinzu. Das Tool stellt Parameter bereit, um die Befehlszeilenargumente zu beheben. Der Skriptblock für Register-ArgumentCompleter verwendet dieses Feature, um die Registerkartenvervollständigen bereitzustellen.