Tag 3 · Block 3: Web-APIs, CIM, Planen und Logging
- Rufe mit
Invoke-RestMethoddie Daten fürhttps://api.github.com/users/octocatab und speichere sie in$user. - Gib
login,nameundpublic_reposaus. - Speichere das Ergebnis als JSON in
C:\Kurs\Ausgabe\octocat.json(ConvertTo-Json). - Ruf einen Benutzer ab, den es nicht gibt (
falscher-benutzer-1234567) und fange den Fehler mittry/catchab. Gib den HTTP-Statuscode aus.
Lösung anzeigen
$user = Invoke-RestMethod -Uri "https://api.github.com/users/octocat""Login: $($user.login)""Name: $($user.name)""Repos: $($user.public_repos)"$user | ConvertTo-Json | Set-Content C:\Kurs\Ausgabe\octocat.json
try { Invoke-RestMethod -Uri "https://api.github.com/users/falscher-benutzer-1234567" -ErrorAction Stop}catch { "Fehler: $($_.Exception.Response.StatusCode)" # NotFound}- Hole mit
Get-CimInstanceBetriebssystem (Win32_OperatingSystem) und Computersystem (Win32_ComputerSystem). - Gib
Caption,Version,LastBootUpTimebzw.Manufacturer,Modelaus. - Frage das Betriebssystem auf
PSLAB-02ab (-ComputerName). - Welche Laufwerke gibt es und wie viel Platz ist frei? (
Win32_LogicalDisk,DriveType = 3)
Lösung anzeigen
Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, LastBootUpTimeGet-CimInstance Win32_ComputerSystem | Select-Object Manufacturer, Model
Get-CimInstance Win32_OperatingSystem -ComputerName PSLAB-02 | Select-Object CSName, Caption, Version
Get-CimInstance Win32_LogicalDisk -Filter "DriveType = 3" | Select-Object DeviceID, @{ n = 'FreiGB'; e = { [math]::Round($_.FreeSpace / 1GB, 1) } }- Schreibe ein Skript
C:\Kurs\Skripte\LogDemo.ps1, das mitAdd-Contenteine Zeile mit Datum und Uhrzeit inC:\Kurs\Logs\demo.logschreibt. - Lege mit
New-ScheduledTaskAction,New-ScheduledTaskTriggerundRegister-ScheduledTaskeine AufgabeKurs-LogDemoan, die dieses Skript mitpwsh.exetäglich um 09:00 ausführt. - Starte die Aufgabe sofort mit
Start-ScheduledTaskund prüfe, ob die Logdatei eine neue Zeile hat und wieLastTaskResultlautet. - Entferne die Aufgabe wieder.
Lösung anzeigen
Set-Content C:\Kurs\Skripte\LogDemo.ps1 -Value 'Add-Content -Path C:\Kurs\Logs\demo.log -Value "Lauf am $(Get-Date)"'
$aktion = New-ScheduledTaskAction -Execute 'C:\Program Files\PowerShell\7\pwsh.exe' ` -Argument '-NoProfile -File "C:\Kurs\Skripte\LogDemo.ps1"'$trigger = New-ScheduledTaskTrigger -Daily -At 09:00Register-ScheduledTask -TaskName 'Kurs-LogDemo' -Action $aktion -Trigger $trigger
Start-ScheduledTask -TaskName 'Kurs-LogDemo'Start-Sleep -Seconds 3Get-Content C:\Kurs\Logs\demo.logGet-ScheduledTaskInfo -TaskName 'Kurs-LogDemo' | Select-Object LastRunTime, LastTaskResult
Unregister-ScheduledTask -TaskName 'Kurs-LogDemo' -Confirm:$falseLastTaskResult von 0 heißt: erfolgreich.
- Erweitere
LogDemo.ps1so, dass sie mitStart-Transcriptein Transcript inC:\Kurs\Logs\LogDemo-transcript.logaufzeichnet und am EndeStop-Transcriptaufruft. Dazwischen:Get-Dateund die ersten drei Prozesse. - Führe das Skript aus und öffne das Transcript mit
Get-Content. Was steht am Anfang und am Ende? - Schreibe eine Funktion
Write-Log(Parameter-Message,-Levelmit StandardINFO), die eine Zeile2026-10-04 09:00:00 [INFO] TextanC:\Kurs\Logs\skript.loganhängt. Rufe sie dreimal auf, einmal mit-Level WARN.
Lösung anzeigen
Start-Transcript -Path C:\Kurs\Logs\LogDemo-transcript.log -Append"Start: $(Get-Date)"Get-Process | Select-Object -First 3"Ende: $(Get-Date)"Stop-Transcriptfunction Write-Log { param( [Parameter(Mandatory = $true)][string]$Message, [string]$Level = 'INFO' ) $zeile = '{0:yyyy-MM-dd HH:mm:ss} [{1}] {2}' -f (Get-Date), $Level, $Message Add-Content -Path C:\Kurs\Logs\skript.log -Value $zeile}Write-Log "Skript gestartet"Write-Log "Dienst fehlt" -Level WARNWrite-Log "Skript beendet"Get-Content C:\Kurs\Logs\skript.logDas Transcript beginnt mit einem Kopf (Zeitpunkt, Benutzer, Rechner, PowerShell-Version) und endet mit dem Endzeitpunkt.