PowerShell-Profil

Overview

Ein PowerShell-Profil ist ein normales Skript, das beim Start einer Sitzung ausgeführt wird. Admins nutzen es für häufig benötigte Funktionen, eigene Aliase, einen angepassten Prompt, PSReadLine-Optionen oder Argument-Completer.

Es gibt vier Profile, die über die automatische Variable $PROFILE erreichbar sind: AllUsersAllHosts, AllUsersCurrentHost, CurrentUserAllHosts und CurrentUserCurrentHost. $PROFILE allein liefert den Pfad für CurrentUserCurrentHost. Hostspezifische Profile tragen den Hostnamen im Dateinamen, etwa Microsoft.PowerShell_profile.ps1 für die Konsole oder Microsoft.VSCode_profile.ps1 für Visual Studio Code.

Windows PowerShell 5.1 und PowerShell 7 nutzen getrennte Profilpfade. Ein Profil für 5.1 wirkt deshalb nicht in pwsh und umgekehrt.

How it works

Wichtige Pfade für PowerShell 7 unter Windows:

  1. AllUsersAllHosts: C:\Program Files\PowerShell\7\profile.ps1
  2. AllUsersCurrentHost: C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
  3. CurrentUserAllHosts: Dokumente\PowerShell\profile.ps1
  4. CurrentUserCurrentHost: Dokumente\PowerShell\Microsoft.PowerShell_profile.ps1

Unter Linux liegen die Benutzerprofile in ~/.config/powershell. Ein fehlendes Profil legst Du mit New-Item -ItemType File -Path $PROFILE -Force an, -Force erzeugt dabei auch fehlende Ordner. Weil ein Profil ein Skript ist, greift unter Windows die Execution Policy, mindestens RemoteSigned ist nötig. Mit pwsh -NoProfile startest Du eine Sitzung ohne Profil.

Benefits

  • Einheitliche Arbeitsumgebung: Prompt, Farben und Tastenkürzel sind in jeder Sitzung gleich
  • Zeitersparnis: Häufig genutzte Hilfsfunktionen stehen sofort bereit, ohne dass Du sie jedes Mal laden musst
  • Zentrale Vorgaben: Über AllUsers-Profile setzt Du auf Jump-Hosts Standards für alle Admins
  • Trennung nach Host: Einstellungen für VS Code und Konsole lassen sich getrennt pflegen

Practical example

Auf dem gemeinsamen Admin-Jump-Host eines Energieversorgers mit 600 Mitarbeitenden arbeiten fünf Administratoren. Die IT legt ein AllUsersAllHosts-Profil an, das im Prompt farbig anzeigt, ob die Sitzung erhöht läuft, und PSReadLine so konfiguriert, dass Befehle mit Kennwörtern nicht in der History landen. Persönliche Funktionen pflegt jeder Admin in seinem CurrentUser-Profil. Versehentliche Befehle in einer Admin-Sitzung sind seitdem seltener geworden.

Things to keep in mind

  • Profile schlank halten: Jedes geladene Modul verlängert den Start, besser Funktionen bei Bedarf laden
  • In geplanten Aufgaben und Automatisierungen -NoProfile verwenden, damit Skripte nicht von persönlichen Einstellungen abhängen
  • AllUsers-Profile vor Änderungen durch Standardbenutzer schützen, weil sie in jeder Admin-Sitzung ausgeführt werden
  • Keine Kennwörter oder Tokens im Profil speichern, dafür SecretManagement nutzen

Conclusion

Das Profil macht die PowerShell-Konsole zu Deinem persönlichen Werkzeugkasten. Für Automatisierung gilt das Gegenteil: Skripte sollten mit -NoProfile laufen.