Kurz: - learn.microsoft.com/powershell (Handbuch), PowerShell in a Month of Lunches, PowerShell.org - Pester für Tests, PSScriptAnalyzer für Stil, VS Code mit PowerShell-Erweiterung - Wiki dieser Seite.
Teil des Kurses PowerShell
Kapitel 8 von 8 im Kurs PowerShell (Abschnitt „Nachschlagen“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.
Wichtige Cmdlets
| Aufgabe | Cmdlets (Aliase) |
|---|---|
| Hilfe | Get-Help, Get-Command, Get-Member, Get-Alias |
| Ausgabe | Write-Output, Write-Host, Write-Verbose, Write-Warning, Write-Error, Out-File, Out-String |
| Objekte | Select-Object (select), Where-Object (?, where), Sort-Object (sort), ForEach-Object (%), Group-Object, Measure-Object |
| System | Get-Process (ps), Stop-Process, Get-Service, Start-Service, Get-ComputerInfo |
| Dateien | Get-ChildItem (ls), Get-Content (cat), Set-Content, Copy-Item (cp), Remove-Item (rm), New-Item |
| Netzwerk | Invoke-WebRequest (curl), Invoke-RestMethod, Test-Connection, Test-NetConnection |
| Daten | ConvertTo-Json, ConvertFrom-Json, Import-Csv, Export-Csv, ConvertTo-Csv |
| Zeit | Get-Date, New-TimeSpan, Start-Sleep |
Operatoren auf einen Blick
Vergleich: -eq -ne -gt -ge -lt -le (Groß/Klein egal; -ceq -cne: unterscheidet)
Text: -like -notlike -match -notmatch -replace -split -join -f
Menge: -in -notin -contains -notcontains
Logik: -and -or -not -xor !
Typ: -is -isnot -as
Umleitung: > >> 2> 2>&1 *>
PS 7: ?: ?? ??= && || (Pipeline-Verkettung)Automatische Variablen
| Variable | Bedeutung |
|---|---|
$_ / $PSItem | aktuelles Objekt in der Pipeline |
$args | nicht benannte Argumente |
$? | war der letzte Befehl erfolgreich? |
$LASTEXITCODE | Exit-Code des letzten externen Programms |
$Error | Liste der letzten Fehler |
$PSScriptRoot | Ordner des laufenden Skripts |
$HOME, $PWD, $PID | Home, aktueller Ordner, Prozess-ID |
$env:NAME | Umgebungsvariable |
$IsWindows, $IsLinux, $IsMacOS | Plattform |
Muster
# Splatting, Pipeline mit berechneten Eigenschaften, formatierte Ausgabe
$daten = 1..5 | ForEach-Object { [pscustomobject]@{ Nr = $_; Quadrat = $_ * $_; Gerade = $_ % 2 -eq 0 } }
$daten | Where-Object Gerade | Select-Object Nr, Quadrat | ForEach-Object { "$($_.Nr) -> $($_.Quadrat)" }
$daten | Measure-Object Quadrat -Sum | Select-Object -ExpandProperty Sum
($daten | Sort-Object Quadrat -Descending | Select-Object -First 1).Nr
"{0:N1} MB" -f (1536000 / 1MB)
1KB, 1MB, 1GB
$null -eq $undefiniert
$PSVersionTable.PSEditionAusgabe:
2 -> 4
4 -> 16
55
5
1.5 MB
1024
1048576
1073741824
True
CoreHäufige Fehler
| Problem | Ursache / Lösung |
|---|---|
> statt -gt | > leitet Ausgabe in eine Datei um, Vergleich ist -gt |
try/catch fängt nichts | Fehler ist nicht abbrechend: -ErrorAction Stop |
| Funktion gibt unerwartete Werte zurück | alle Ausgaben werden zurückgegeben: $null = ... oder ` |
Format-Table in der Mitte der Pipeline | nur zum Anzeigen am Ende |
| Array wird langsam | += kopiert; List[T] oder Ergebnis der Schleife sammeln |
| Leerzeichen im Pfad | Pfad in Anführungszeichen, Join-Path nutzen |
Skripte sind auf diesem System deaktiviert | Set-ExecutionPolicy RemoteSigned -Scope CurrentUser |
| Alias in Skripten | Aliase wie ls, % nur interaktiv; in Skripten volle Namen |
Write-Host für Ergebnisse | Rückgaben mit Write-Output; Write-Host nur für Anzeigen |
Weiterlernen
- learn.microsoft.com/powershell (Handbuch), PowerShell in a Month of Lunches, PowerShell.org
- Pester für Tests, PSScriptAnalyzer für Stil, VS Code mit PowerShell-Erweiterung
- Wiki dieser Seite: Artikel zu Windows-Administration und Automatisierung
Merke
- Alles ist ein Objekt: Pipeline,
Where-Object,Select-Object,Sort-Object - Cmdlets Verb-Nomen, Hilfe mit
Get-Help/Get-Member - Skripte robust machen:
Set-StrictMode,$ErrorActionPreference = "Stop",try/catch - PowerShell 7 läuft überall; Module aus der Gallery erweitern es
Quiz zur Selbstkontrolle
Wie leitest du Fehlerausgabe um?
- 2> (richtig)
- <<
- &
Was liefert $?
- Ob der letzte Befehl erfolgreich war (richtig)
- Die Hilfe
- Den aktuellen Pfad
- Die Anzahl der Fehler
Wofür ist $PSScriptRoot?
- Der Ordner des laufenden Skripts (richtig)
- Der Home-Ordner
- Das Stammverzeichnis
- Der Name des Benutzers
Weiter im Kurs
Zurück: Projekte: Praxisskripte
Alle Kapitel: PowerShell im Überblick