- 2 Abschnitte
- 16 Lektionen
- Um den Kurs in deinem Profil zu hinterlegen klicke oben auf Starten
- Grundlagen & Einstieg9
- Fortgeschritten8
Lösungen Fortgeschritten
Aufgabe 1
Ein PowerShell-Modul ist eine Sammlung von Funktionen, Cmdlets oder Variablen, die in einer wiederverwendbaren Struktur gespeichert sind.
Im Gegensatz zu einer einzelnen .ps1-Datei kann ein Modul mehrere Funktionen enthalten und wird zentral verwaltet.
Standardpfade für Module sind:
C:\Users\<Benutzer>\Documents\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules
Module werden mit Import-Module <Name> geladen und mit Export-ModuleMember gesteuert, welche Funktionen exportiert werden.
Aufgabe 2
Ein einfaches Modul Gruss.psm1:
function Get-Gruß {
param([string]$Name)
"Hallo $Name!"
}
Speichern unter:C:\Users\<Benutzer>\Documents\WindowsPowerShell\Modules\Gruss\Gruss.psm1
Dann im Terminal:
Import-Module Gruss
Get-Gruß -Name "Ricky"
Aufgabe 3
Ein Skript wird manuell oder interaktiv gestartet – z. B. .\backup.ps1.
Eine geplante Aufgabe läuft automatisch zu einer bestimmten Zeit oder bei einem Ereignis (z. B. beim Systemstart).
Skript = manuell, flexibel
Task = automatisiert, planbar
Aufgabe 4
Mit SCHTASKS:
SCHTASKS /Create /SC DAILY /ST 21:00 /TN "BackupJob" /TR "powershell.exe -ExecutionPolicy Bypass -File C:\Skripte\backup.ps1"
Oder PowerShell-intern:
$trigger = New-JobTrigger -Daily -At "21:00"
Register-ScheduledJob -Name "Backup" -Trigger $trigger -FilePath "C:\Skripte\backup.ps1"
Aufgabe 5
Ein Hintergrundjob:
Start-Job -Name "Scan" -ScriptBlock {
Get-ChildItem -Path C:\ -Recurse
}
Status prüfen:
Get-Job Ergebnis abrufen:
Receive-Job -Name "Scan"
So läuft der Befehl asynchron, also ohne dein Terminal zu blockieren.
Aufgabe 6
Dafür nutzt man die Klasse System.IO.FileSystemWatcher:
$ordner = "C:\Uploads"
$watcher = New-Object IO.FileSystemWatcher $ordner, "*.*"
Register-ObjectEvent $watcher Created -Action {
Add-Content "C:\Uploads\log.txt" "Neue Datei: $($Event.SourceEventArgs.Name)"
}
Receive-Job -Name "Scan"
Aufgabe 7
Möglichkeiten für Logging:
Write-OutputoderAdd-Contentfür eigene LogdateienStart-Transcriptfür komplette SitzungsprotokolleOut-Filefür gezielte Ausgabe
Beispiel:
Start-Transcript -Path "C:\Logs\backup.log"
# Skriptaktionen
Stop-Transcript
Aufgabe 8
Eine API ist eine Schnittstelle, über die Programme Daten austauschen.
PowerShell kann damit Informationen von Webdiensten abfragen oder steuern.
Beispiele:
Wetterdaten über
https://wttr.inabrufenGitHub-Repos oder Commits auslesen
Exchange Online oder Azure AD verwalten
Aufgabe 9
Das Cmdlet ist:
Invoke-RestMethod
Unterschied:
Invoke-RestMethod→ gibt direkt Objekte zurück (ideal für JSON)Invoke-WebRequest→ liefert komplette HTML-Seiten oder Rohtext
Aufgabe 10
JSON-Antwort:
{"Temperatur":21,"Status":"Sonne"}
In PowerShell:
$response = '{"Temperatur":21,"Status":"Sonne"}' | ConvertFrom-Json
$response.Temperatur
Ausgabe:
21 Aufgabe 11
Sicherer Umgang mit API-Keys:
# Key verschlüsselt speichern
"MeinAPIKey123" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File "$HOME\api.key"
# Laden und entschlüsseln
$key = Get-Content "$HOME\api.key" | ConvertTo-SecureString
$plain = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($key)
)
Aufgabe 12
$url = "https://api.ipify.org?format=json"
$response = Invoke-RestMethod -Uri $url
$ip = $response.ip
$log = "C:\Logs\ip_monitor.log"
if (!(Test-Path $log)) { New-Item -ItemType File -Path $log | Out-Null }
$last = Get-Content $log -Tail 1
if ($ip -ne $last) {
Add-Content $log "$ip"
Write-Host "IP geändert: $ip"
}
Aufgabe 13
Synchron bedeutet: Das Skript wartet, bis ein Befehl fertig ist.
Asynchron bedeutet: mehrere Aufgaben laufen gleichzeitig.
Beispiel:
Synchron:
Copy-Item -Path C:\A -Destination D:\B
Write-Host "Fertig"
Asynchron:
Start-Job -ScriptBlock { Copy-Item C:\A D:\B }
Write-Host "Läuft im Hintergrund"
Aufgabe 14
Mögliche Ursachen:
Der Task läuft unter einem Benutzer ohne Rechte auf das Skript
Der Pfad im Task ist relativ statt absolut
ExecutionPolicy verhindert die Ausführung (
Restricted)Netzwerkpfade sind beim Start noch nicht verbunden
Keine Ausgabe oder Logging aktiviert → Fehler bleibt unbemerkt
Aufgabe 15
Best Practices:
Sinnvolle Funktionsnamen (
Get-BackupReport,Start-Monitor)Kommentare für komplexe Abschnitte
Einheitliches Fehler- und Loghandling
Modulare Struktur (ein Modul pro Themengebiet)
Versionierung mit
Get-Module -ListAvailableund GitAlle Skripte zentral mit Transcript-Logs ausstatten
