PowerShell bietet verschiedene Möglichkeiten, mehrzeilige Befehle zu erstellen und auszuführen. Dies ist besonders nützlich bei komplexeren Operationen, langen Pipelines oder wenn Sie Ihre Befehle strukturiert und lesbar gestalten möchten.
Direkte Eingabe in der PowerShell-Konsole
Backtick für Zeilenwrapping
Der einfachste Weg, einen Befehl über mehrere Zeilen zu schreiben, ist die Verwendung des Backtick-Zeichens (`) am Ende einer Zeile:
Get-ChildItem -Path C:\Users `
-Recurse `
-Filter "*.txt" `
| Where-Object { $_.Length -gt 1000 }
Das Backtick teilt PowerShell mit, dass der Befehl in der nächsten Zeile fortgesetzt wird.
Natürliche Zeilenumbrüche bei Pipelines
PowerShell erkennt automatisch, wenn eine Pipeline nicht vollständig ist und wartet auf weitere Eingaben:
Get-Process |
Where-Object { $_.CPU -gt 10 } |
Sort-Object CPU -Descending |
Select-Object -First 10
Nach dem Pipe-Symbol (|) können Sie einfach Enter drücken, und PowerShell zeigt >>
an, um anzuzeigen, dass weitere Eingaben erwartet werden.
Here-Strings für komplexe Inhalte
Für mehrzeilige Strings verwenden Sie Here-Strings:
$multilineText = @"
Dies ist ein mehrzeiliger
Text, der über mehrere
Zeilen verteilt ist.
"@
Multiline-Befehle in PowerShell-Skripten
Grundlegende Strukturierung
In PowerShell-Skriptdateien (.ps1) können Sie Befehle natürlich über mehrere Zeilen verteilen:
# Beispiel: Systeminfo sammeln
$systemInfo = Get-ComputerInfo |
Select-Object WindowsProductName,
WindowsVersion,
TotalPhysicalMemory,
CsProcessors |
Format-Table -AutoSize
Splatting für Parameter
Splatting ist eine der elegantesten Techniken in PowerShell, um Befehle mit vielen Parametern übersichtlich zu gestalten. Anstatt alle Parameter in eine lange Zeile zu schreiben, sammeln Sie sie in einer Hashtable und übergeben diese mit dem @
-Symbol.
Grundlegendes Splatting:
# Statt dieser unübersichtlichen Zeile:
Get-ChildItem -Path "C:\Logs" -Recurse -Include "*.log" -Force -ErrorAction SilentlyContinue
# Verwenden Sie Splatting:
$params = @{
Path = "C:\Logs"
Recurse = $true
Include = "*.log"
Force = $true
ErrorAction = "SilentlyContinue"
}
Get-ChildItem @params
Splatting mit Pipelines kombinieren:
$searchParams = @{
Path = "C:\Windows\System32"
Filter = "*.dll"
Recurse = $false
}
$filterParams = @{
Property = "LastWriteTime"
Descending = $true
}
Get-ChildItem @searchParams |
Where-Object { $_.Length -gt 1MB } |
Sort-Object @filterParams |
Select-Object -First 10
Dynamisches Splatting:
Sie können Parameter-Hashtables auch dynamisch aufbauen:
$copyParams = @{
Source = "C:\Source"
Destination = "C:\Backup"
}
# Parameter nur unter bestimmten Bedingungen hinzufügen
if ($IncludeSubfolders) {
$copyParams.Add("Recurse", $true)
}
if ($OverwriteExisting) {
$copyParams.Add("Force", $true)
}
Copy-Item @copyParams
Splatting für verschiedene Cmdlets:
# Web-Request Parameter
$webParams = @{
Uri = "https://api.github.com/users/octocat"
Method = "GET"
Headers = @{
"User-Agent" = "PowerShell Script"
"Accept" = "application/json"
}
ContentType = "application/json"
}
$response = Invoke-RestMethod @webParams
# Service-Parameter
$serviceParams = @{
Name = @("Spooler", "BITS", "Themes")
ComputerName = "Server01"
ErrorAction = "Continue"
}
Get-Service @serviceParams
Hashtables und Arrays über mehrere Zeilen
$serverConfig = @{
Name = "WebServer01"
IPAddress = "192.168.1.100"
Services = @(
"IIS",
"SQL Server",
"Windows Update"
)
Settings = @{
AutoStart = $true
LogLevel = "Verbose"
}
}
Fazit
Multiline-Befehle in PowerShell erhöhen die Lesbarkeit und Wartbarkeit Ihrer Skripte erheblich. Splatting ist dabei eine besonders mächtige Technik, die nicht nur die Übersichtlichkeit verbessert, sondern auch die Wiederverwendbarkeit von Parameter-Sets ermöglicht. Ob Sie das Backtick für einfache Zeilenumbrüche, natürliche Pipeline-Fortsetzungen oder Splatting für komplexe Parameter verwenden - die richtige Formatierung macht Ihre PowerShell-Befehle professioneller und einfacher zu verstehen.
Experimentieren Sie mit diesen Techniken und finden Sie heraus, welcher Stil am besten zu Ihrem Workflow passt. Die Investition in sauberen, gut strukturierten Code zahlt sich langfristig durch einfachere Wartung und weniger Fehler aus.