- 2 Abschnitte
- 16 Lektionen
- Um den Kurs in deinem Profil zu hinterlegen klicke oben auf Starten
- Grundlagen & Einstieg9
- Fortgeschritten8
Arbeiten mit APIs und Webrequests
APIs (Application Programming Interfaces) sind Schnittstellen, über die Programme Daten austauschen können.
In der Praxis läuft das meist über HTTP-Anfragen und JSON-Antworten.
PowerShell bietet dafür zwei sehr mächtige Cmdlets:
| Cmdlet | Beschreibung |
|---|---|
Invoke-WebRequest | Zugriff auf Webseiten, HTML-Inhalte, Downloads |
Invoke-RestMethod | Speziell für REST-APIs (liefert strukturierte Daten zurück) |
Daten abrufen mit Invoke-RestMethod
Nehmen wir ein einfaches Beispiel: eine öffentliche API für Währungsdaten.
# Beispiel: Euro -> USD Umrechnung über exchangerate.host
$response = Invoke-RestMethod -Uri "https://api.exchangerate.host/latest?base=EUR&symbols=USD"
$response
PowerShell erkennt automatisch, dass die Antwort im JSON-Format ist,
und wandelt sie direkt in ein Objekt um:
base : EUR
date : 2025-10-07
rates : @{USD=1.093}
Auf einzelne Werte greifst du ganz einfach zu:
$response.rates.USD
JSON verstehen und auswerten
APIs schicken in der Regel Daten im JSON-Format („JavaScript Object Notation“).
Das ist nur eine strukturierte Textform — PowerShell wandelt sie automatisch um.
Du kannst aber auch manuell konvertieren:
$json = '{"name":"Ricky","projekt":"Informatik-Pruefung.de"}'
$obj = $json | ConvertFrom-Json
$obj.projekt
Umgekehrt kannst du auch eigene JSON-Daten erzeugen:
$data = @{
user = "Admin"
action = "Login"
status = "Success"
}
$data | ConvertTo-Json
Authentifizierte API-Anfragen
Viele APIs erfordern eine Anmeldung (API-Key oder Token).
Das funktioniert meist über einen Header:
$headers = @{
"Authorization" = "Bearer abc123xyz"
}
$response = Invoke-RestMethod -Uri "https://api.beispiel.de/data" -Headers $headers
Tipp:
API-Keys solltest du niemals im Klartext im Skript speichern.
Lege sie lieber verschlüsselt ab:
"abc123xyz" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File "$HOME\api.key"
Und zum Verwenden:
$key = Get-Content "$HOME\api.key" | ConvertTo-SecureString
$plain = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($key)
)
Beispiel: Wetterbericht abrufen
Hier rufen wir aktuelle Wetterdaten von einer freien API ab:
$stadt = "Konstanz"
$url = "https://wttr.in/$stadt?format=j1"
$response = Invoke-RestMethod -Uri $url
Write-Host "Aktuelle Temperatur in $stadt:" $response.current_condition.temp_C "°C"
So siehst du z. B. in deiner Automatisierung jeden Morgen das aktuelle Wetter.
Das ist super für Reports oder Monitoring-Skripte.
Daten weiterverarbeiten oder speichern
Einmal abgefragte Daten kannst du wie gewohnt weiterverwenden:
$response.forecast[0].hourly |
Select-Object time, tempC, weatherDesc |
Export-Csv "C:\Logs\Wetter.csv" -NoTypeInformation
Oder per Mail verschicken:
Send-MailMessage -To "admin@firma.de" -From "server@firma.de" `
-Subject "Wetterbericht" `
-Body "Temperatur: $($response.current_condition.temp_C)°C" `
-SmtpServer "mail.firma.de"
Beispiel: GitHub-API
Hier siehst du, wie du die letzten Commits eines Projekts abrufen kannst:
$repo = "PowerShell/PowerShell"
$url = "https://api.github.com/repos/$repo/commits"
Invoke-RestMethod -Uri $url |
Select-Object -First 3 -Property commit |
ForEach-Object { $_.commit.message }
Damit könntest du z. B. automatisiert prüfen, ob sich ein Projekt geändert hat —
ideal für Update-Benachrichtigungen oder Change-Logs.
