Tag 2 · Block 2: CSV, Prozesse und Dienste
Die Datei C:\Kurs\Daten\Mitarbeiter.csv hat die Spalten Name, Abteilung und Alter.
- Importiere die Datei in
$mitarbeiterund zeige sie an. - Zeige nur die Mitarbeiter der Abteilung
IT. - Sortiere alle Mitarbeiter nach Alter, aufsteigend. Achte darauf, dass 9 vor 30 kommt, auch wenn die Datei Texte liefert.
- Exportiere die IT-Mitarbeiter, sortiert nach Alter, als
C:\Kurs\Ausgabe\Mitarbeiter_IT.csv. - Wie viele Mitarbeiter hat jede Abteilung? (Tipp:
Group-Object Abteilung, und lies die Hilfe.)
Lösung anzeigen
$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, CountImport-Csv liefert alle Werte als Text. Ohne [int] würde Sort-Object alphabetisch sortieren.
- Erzeuge mit
[PSCustomObject]drei Produkte mitName,PreisundLagerund speichere sie alsC:\Kurs\Ausgabe\Produkte.csvmit Semikolon als Trennzeichen. - Lies die Datei wieder ein, achte dabei auf das Trennzeichen.
- Welche Produkte kosten mehr als 700? Beachte, dass der Preis nach dem Import Text ist.
Lösung anzeigen
$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 }- Zeige alle Prozesse, die mehr als 150 MB Arbeitsspeicher belegen, absteigend nach Speicher sortiert.
- Starte
notepadmitStart-Process, finde den Prozess mitGet-Processund beende ihn mitStop-Process. Teste das Beenden vorher mit-WhatIf. - Speichere eine Liste der zehn Prozesse mit der höchsten CPU-Zeit in
C:\Kurs\Ausgabe\TopProzesse.csv(nurName,Id,CPU).
Lösung anzeigen
Get-Process | Where-Object { $_.WorkingSet -gt 150MB } | Sort-Object WorkingSet -Descending
Start-Process notepadGet-Process -Name notepadGet-Process -Name notepad | Stop-Process -WhatIfGet-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.csvAuf einem frischen System hat noch nicht jeder Prozess CPU-Zeit. Das ist unproblematisch.
Arbeite in einer Administrator-PowerShell.
- Welchen Status und welchen Starttyp hat der Dienst
Spooler? (Tipp:Select-Object Name, Status, StartType.) - Stoppe den Dienst, prüfe den Status und starte ihn wieder. Teste vorher mit
-WhatIf. - Liste alle laufenden Dienste, deren Name mit
Wbeginnt. Exportiere das Ergebnis nachC:\Kurs\Ausgabe\Dienste_W.csv. - Welche Dienste sind auf Automatisch gestellt, laufen aber nicht? Das ist eine typische Monitoring-Frage.
Lösung anzeigen
Get-Service -Name Spooler | Select-Object Name, Status, StartType
Stop-Service -Name Spooler -WhatIfStop-Service -Name SpoolerGet-Service -Name SpoolerStart-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, StatusEinige Dienste mit Starttyp „Automatisch (verzögert)” oder „Trigger-Start” tauchen hier regulär auf, ohne dass etwas kaputt ist.
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
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-TableAn Tag 3 machst du daraus ein Skript mit Parametern, Fehlerbehandlung und Zeitplan.