Zurück zu PowerShell
PowerShell Scripting
Variablen, Schleifen, Funktionen und Fehlerbehandlung — Skripte schreiben wie ein Profi.
Variablen und Datentypen
# Variablen beginnen mit $
$name = "Server01"
$anzahl = 42
$aktiv = $true
# Arrays
$server = @("DC01", "DC02", "FS01")
$server[0] # "DC01"
# Hashtables (Schluessel-Wert-Paare)
$config = @{
Host = "192.168.1.1"
Port = 443
SSL = $true
}
Kontrollstrukturen
# If / ElseIf / Else
$freierPlatz = (Get-PSDrive C).Free / 1GB
if ($freierPlatz -lt 5) {
Write-Warning "Weniger als 5 GB frei!"
} elseif ($freierPlatz -lt 20) {
Write-Host "Platz wird knapp: $([math]::Round($freierPlatz,1)) GB"
} else {
Write-Host "Genug Platz: $([math]::Round($freierPlatz,1)) GB"
}
# Switch
$tag = (Get-Date).DayOfWeek
switch ($tag) {
"Monday" { "Wochenstart - Backup pruefen" }
"Friday" { "Wochenende - Logs archivieren" }
default { "Normaler Tag" }
}
# ForEach-Schleife
$dienste = @("Spooler", "W32Time", "WinRM")
foreach ($dienst in $dienste) {
Get-Service -Name $dienst | Select-Object Name, Status
}
# For-Schleife
for ($i = 1; $i -le 5; $i++) {
Write-Host "Durchlauf $i"
}
Funktionen mit Parametern
function Get-DiskReport {
param(
[string]$ComputerName = $env:COMPUTERNAME,
[int]$WarningSchwelle = 10
)
$laufwerke = Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3"
foreach ($lw in $laufwerke) {
$freiGB = [math]::Round($lw.FreeSpace / 1GB, 1)
$status = if ($freiGB -lt $WarningSchwelle) { "WARNUNG" } else { "OK" }
[PSCustomObject]@{
Laufwerk = $lw.DeviceID
FreiGB = $freiGB
Status = $status
}
}
}
Get-DiskReport -WarningSchwelle 20
Fehlerbehandlung: Try/Catch/Finally
try {
$inhalt = Get-Content "C:\wichtig\config.txt" -ErrorAction Stop
Write-Host "Datei gelesen: $($inhalt.Count) Zeilen"
} catch [System.IO.FileNotFoundException] {
Write-Warning "Datei nicht gefunden!"
} catch {
Write-Error "Unbekannter Fehler: $_"
} finally {
Write-Host "Vorgang abgeschlossen."
}
Praxis: Einfaches Backup-Skript
$quelle = "C:\Projekte"
$ziel = "D:\Backup\Projekte_$(Get-Date -Format 'yyyy-MM-dd')"
if (!(Test-Path $ziel)) { New-Item $ziel -ItemType Directory | Out-Null }
Copy-Item "$quelle\*" $ziel -Recurse -Force
Write-Host "Backup nach $ziel abgeschlossen." -ForegroundColor Green
Tipp: Speichere Skripte als .ps1-Datei. Starte mit .\MeinSkript.ps1 oder Rechtsklick → "Mit PowerShell ausführen".