PowerShell 7 auf Linux: Installation, Praxisbeispiele und Best Practices
Kurzbeschreibung: In diesem Beitrag zeige ich, wie Sie PowerShell 7 (pwsh) auf verschiedenen Linux-Distributionen installieren, typische Aufgaben ausführen, Skripte betreiben und dabei Sicherheits- sowie Best-Practice-Aspekte beachten.
Warum PowerShell 7 auf Linux?
PowerShell 7 ist eine plattformübergreifende Shell- und Skriptsprache (nachfolger von PowerShell Core), die auf .NET läuft. Sie vereint leistungsstarke Objekt-Pipelines mit einfacher Interoperabilität zu nativen Linux-Befehlen. Das ist praktisch, wenn Sie Automatisierungsskripte schreiben wollen, die sowohl unter Windows als auch unter Linux zuverlässig laufen.
Wichtige Vorteile
- Objektbasierte Pipeline (weniger Parsen von Text)
- Cross-Platform: läuft auf Linux, macOS und Windows
- Erweiterbar durch Module (PowerShellGet / PSGallery)
- Moderne Features: ForEach-Object -Parallel, verbesserte Fehlerbehandlung
Installation (Schritt-für-Schritt)
Die offizielle Dokumentation enthält stets die aktuellsten Pakete. Hier sind die gebräuchlichsten Installationsbefehle.
Ubuntu / Debian (apt)
# Beispiel für Ubuntu 20.04+ / Debian
sudo apt update
sudo apt install -y wget apt-transport-https software-properties-common
wget -q https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y powershell
# Starten
pwsh --version
CentOS / RHEL (yum / dnf)
# RHEL/CentOS 7/8 Beispiel
sudo yum install -y yum-utils
curl -LO https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm
sudo rpm -Uvh packages-microsoft-prod.rpm
sudo yum install -y powershell
pwsh --version
Fedora
sudo dnf install -y https://packages.microsoft.com/config/fedora/$(rpm -E %fedora)/packages-microsoft-prod.rpm
sudo dnf install -y powershell
pwsh --version
Arch Linux
PowerShell ist als Community-Paket (AUR) verfügbar. Verwenden Sie einen AUR-Helper wie yay:
yay -S powershell-bin
pwsh --version
Alternative: Snap
sudo snap install powershell --classic
pwsh --version
Erster Start & Grundeinstellungen
Starten Sie die Shell mit pwsh. Nützliche erste Prüfungen:
# Version prüfen
pwsh --version
# Pfad zur Binärdatei
which pwsh
# Module auflisten
pwsh -Command "Get-Module -ListAvailable"
Skripte mit PowerShell auf Linux
PowerShell-Skripte können wie normale Shell-Skripte ausgeführt werden. Nutzen Sie die Shebang-Zeile, damit das Skript direkt ausführbar ist.
#!/usr/bin/env pwsh
# beispiel.ps1 - prüft freien Speicher und listet Dienste
$free = Get-PSDrive -Name / | Select-Object Used, Free
Write-Output "Freier Speicher: $($free.Free)"
Get-Service | Where-Object { $_.Status -eq 'Running' } | Select-Object Name, Status
Markieren Sie die Datei ausführbar: chmod +x beispiel.ps1 und dann ./beispiel.ps1.
Praktische Beispiele
1) Systemdienste prüfen und neustarten
# Prüfe systemd Dienste (Beispiel)
Get-Service | Where-Object { $_.Name -like '*ssh*' -or $_.Name -like '*nginx*' } | ForEach-Object {
$s = $_
Write-Output "Service: $($s.Name) - Status: $($s.Status)"
if ($s.Status -ne 'Running') {
Write-Output "Starte $($s.Name) ..."
sudo systemctl start $($s.Name.ToLower())
}
}
Hinweis: PowerShell-Objekte für Get-Service auf Linux hängen von der Distribution ab – in vielen Fällen ist ein Mix mit systemctl-Aufrufen sinnvoll.
2) Pakete verwalten (apt-Beispiel)
# apt aktualisieren und Paket prüfen
sudo apt update
$pkg = 'nginx'
$installed = (apt list --installed 2>/dev/null | Select-String "^$pkg/") -ne $null
if (-not $installed) {
Write-Output "Installiere $pkg ..."
sudo apt install -y $pkg
} else {
Write-Output "$pkg ist bereits installiert"
}
3) Parallele Verarbeitung mit ForEach-Object -Parallel
$hosts = 'host1','host2','host3'
$hosts | ForEach-Object -Parallel {
param($h)
# Beispiel: ping und Ausgabe
if (Test-Connection -ComputerName $h -Count 1 -Quiet) {
"Host $h erreichbar"
} else {
"Host $h nicht erreichbar"
}
} -ThrottleLimit 5
Remoting mit SSH
PowerShell nutzt auf Linux üblicherweise SSH für Remoting (Enter-PSSession / Invoke-Command):
# Interaktiv auf einen entfernten Host wechseln
Enter-PSSession -HostName server.example.com -UserName user
# oder Befehle remote ausführen
Invoke-Command -HostName server.example.com -UserName user -ScriptBlock { hostname; uname -a }
Voraussetzung: SSH-Zugang auf dem Zielsystem und konfigurierte Schlüssel/Authentifizierung.
Sicherheit & Best Practices
- Führen Sie pwsh nicht als root aus, wenn es nicht nötig ist. Nutzen Sie sudo gezielt.
- Signieren Sie kritische Skripte (Code-Signing), wenn verfügbar, und prüfen Sie Dateiberechtigungen.
- Nutzen Sie
/etc/sudoers.dfür feinere Rechtevergabe, anstatt globalen Root-Zugang. - Verwalten Sie Secrets sicher: Verwenden Sie Secret-Management (z. B. HashiCorp Vault, Azure Key Vault) statt Klartext in Skripten.
- Regelmäßige Updates: PowerShell selbst und das zugrunde liegende System aktuell halten.
Fehlerbehebung (Quick Checks)
pwsh --version— Versionsprüfungwhich pwsh— Pfad prüfen- Module-Probleme:
Get-Module -ListAvailableundInstall-Module - Logs: System-Logs (
journalctl -u servicename) nutzen — PowerShell selbst schreibt Fehler meist in STDERR/STDOUT
Nützliche Module & Ressourcen
- PowerShell Gallery: https://www.powershellgallery.com
- Microsoft Docs: PowerShell on Linux
- Beliebte Module:
PowerShellGet,PSReadLine,Microsoft.PowerShell.Archive
Fazit
PowerShell 7 ist eine starke Ergänzung für Linux-Tools: Es vereinfacht plattformübergreifende Skripte, bietet moderne Sprachfeatures und lässt sich gut mit nativen Linux-Tools kombinieren. Achten Sie auf aktuelle Versionen, sichere Geheimnisverwaltung und testen Sie Skripte in einer kontrollierten Umgebung, bevor Sie sie in Produktion nehmen.
Share this content:
Kommentar abschicken