Zum Inhalt springen

Tag 2 · Block 2: CSV, Prozesse und Dienste

Core🖥 PSLAB-VM
2.1 · CSV auswertenÜbung🚫 KI-frei lösen

Die Datei C:\Kurs\Daten\Mitarbeiter.csv hat die Spalten Name, Abteilung und Alter.

  1. Importiere die Datei in $mitarbeiter und zeige sie an.
  2. Zeige nur die Mitarbeiter der Abteilung IT.
  3. Sortiere alle Mitarbeiter nach Alter, aufsteigend. Achte darauf, dass 9 vor 30 kommt, auch wenn die Datei Texte liefert.
  4. Exportiere die IT-Mitarbeiter, sortiert nach Alter, als C:\Kurs\Ausgabe\Mitarbeiter_IT.csv.
  5. Wie viele Mitarbeiter hat jede Abteilung? (Tipp: Group-Object Abteilung, und lies die Hilfe.)
Lösung anzeigen
Terminal-Fenster
$mitarbeiter = Import-Csv C:\Kurs\Daten\Mitarbeiter.csv
$mitarbeiter
$mitarbeiter | Where-Object Abteilung -eq 'IT'
$mitarbeiter | Sort-Object { [int]$_.Alter }
$mitarbeiter |
Where-Object Abteilung -eq 'IT' |
Sort-Object { [int]$_.Alter } |
Export-Csv C:\Kurs\Ausgabe\Mitarbeiter_IT.csv
$mitarbeiter | Group-Object Abteilung | Select-Object Name, Count

Import-Csv liefert alle Werte als Text. Ohne [int] würde Sort-Object alphabetisch sortieren.

2.2 · Eine CSV selbst erzeugenÜbung🚫 KI-frei lösen
  1. Erzeuge mit [PSCustomObject] drei Produkte mit Name, Preis und Lager und speichere sie als C:\Kurs\Ausgabe\Produkte.csv mit Semikolon als Trennzeichen.
  2. Lies die Datei wieder ein, achte dabei auf das Trennzeichen.
  3. Welche Produkte kosten mehr als 700? Beachte, dass der Preis nach dem Import Text ist.
Lösung anzeigen
Terminal-Fenster
$produkte = @(
[PSCustomObject]@{ Name = "Laptop"; Preis = 1200; Lager = 10 },
[PSCustomObject]@{ Name = "Tablet"; Preis = 600; Lager = 25 },
[PSCustomObject]@{ Name = "Smartphone"; Preis = 800; Lager = 15 }
)
$produkte | Export-Csv C:\Kurs\Ausgabe\Produkte.csv -Delimiter ";"
$gelesen = Import-Csv C:\Kurs\Ausgabe\Produkte.csv -Delimiter ";"
$gelesen | Where-Object { [int]$_.Preis -gt 700 }
2.3 · ProzesseÜbung🚫 KI-frei lösen
  1. Zeige alle Prozesse, die mehr als 150 MB Arbeitsspeicher belegen, absteigend nach Speicher sortiert.
  2. Starte notepad mit Start-Process, finde den Prozess mit Get-Process und beende ihn mit Stop-Process. Teste das Beenden vorher mit -WhatIf.
  3. Speichere eine Liste der zehn Prozesse mit der höchsten CPU-Zeit in C:\Kurs\Ausgabe\TopProzesse.csv (nur Name, Id, CPU).
Lösung anzeigen
Terminal-Fenster
Get-Process | Where-Object { $_.WorkingSet -gt 150MB } | Sort-Object WorkingSet -Descending
Start-Process notepad
Get-Process -Name notepad
Get-Process -Name notepad | Stop-Process -WhatIf
Get-Process -Name notepad | Stop-Process
Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 10 -Property Name, Id, CPU |
Export-Csv C:\Kurs\Ausgabe\TopProzesse.csv

Auf einem frischen System hat noch nicht jeder Prozess CPU-Zeit. Das ist unproblematisch.

2.4 · Dienste steuernÜbung🚫 KI-frei lösen

Arbeite in einer Administrator-PowerShell.

  1. Welchen Status und welchen Starttyp hat der Dienst Spooler? (Tipp: Select-Object Name, Status, StartType.)
  2. Stoppe den Dienst, prüfe den Status und starte ihn wieder. Teste vorher mit -WhatIf.
  3. Liste alle laufenden Dienste, deren Name mit W beginnt. Exportiere das Ergebnis nach C:\Kurs\Ausgabe\Dienste_W.csv.
  4. Welche Dienste sind auf Automatisch gestellt, laufen aber nicht? Das ist eine typische Monitoring-Frage.
Lösung anzeigen
Terminal-Fenster
Get-Service -Name Spooler | Select-Object Name, Status, StartType
Stop-Service -Name Spooler -WhatIf
Stop-Service -Name Spooler
Get-Service -Name Spooler
Start-Service -Name Spooler
Get-Service |
Where-Object { $_.Status -eq 'Running' -and $_.Name -like 'W*' } |
Select-Object Name, DisplayName, Status |
Export-Csv C:\Kurs\Ausgabe\Dienste_W.csv
Get-Service |
Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } |
Select-Object Name, DisplayName, Status

Einige Dienste mit Starttyp „Automatisch (verzögert)” oder „Trigger-Start” tauchen hier regulär auf, ohne dass etwas kaputt ist.

2.5 · Tägliches MonitoringChallenge🚫 KI-frei lösen

Schreibe die Befehle für einen Bericht „Welche Dienste mit Starttyp Automatisch laufen nicht?” so auf, dass sie in einer Pipeline stehen und das Ergebnis in C:\Kurs\Ausgabe\ServiceReport.csv landet. Ergänze eine zusätzliche Spalte mit dem aktuellen Datum.

Tipp: Mit Select-Object kannst du berechnete Eigenschaften anlegen: @{ Name = 'Datum'; Expression = { Get-Date -Format 'yyyy-MM-dd' } }.

Lösung anzeigen
Terminal-Fenster
Get-Service |
Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } |
Select-Object Name, DisplayName, Status,
@{ Name = 'Datum'; Expression = { Get-Date -Format 'yyyy-MM-dd' } } |
Export-Csv C:\Kurs\Ausgabe\ServiceReport.csv
Import-Csv C:\Kurs\Ausgabe\ServiceReport.csv | Format-Table

An Tag 3 machst du daraus ein Skript mit Parametern, Fehlerbehandlung und Zeitplan.