Tag 1 · Block 2: Pipeline, Variablen und Datenstrukturen
Pipeline
Abschnitt betitelt „Pipeline“- Liste alle Dienste auf (
Get-Service) und sortiere sie nachStatus. - Zeige nur die ersten fünf Dienste an.
- Zeige nur die Spalten
NameundStatusan. - Wie viele Dienste gibt es insgesamt? (Tipp:
Measure-Object.)
Lösung anzeigen
Get-Service | Sort-Object StatusGet-Service | Sort-Object Status | Select-Object -First 5Get-Service | Select-Object Name, StatusGet-Service | Measure-Object- Welche Eigenschaften hat ein Prozessobjekt? Nutze
Get-MembermitGet-Process. - Zeige nur die Properties an.
- Finde eine Eigenschaft, die den Arbeitsspeicher beschreibt. Lass dir damit für die fünf größten Prozesse
Nameund diese Eigenschaft anzeigen.
Lösung anzeigen
Get-Process | Get-MemberGet-Process | Get-Member -MemberType PropertyGet-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5 -Property Name, WorkingSetWorkingSet ist der aktuell belegte physische Speicher in Bytes (WS und PM gibt es ebenfalls).
- Zeige alle laufenden Dienste (
StatusistRunning). - Zeige alle gestoppten Dienste, sortiert nach
DisplayName. - Zeige alle Prozesse mit dem Namen
svchost. - Wie viele laufende Dienste gibt es?
Lösung anzeigen
Get-Service | Where-Object Status -eq 'Running'Get-Service | Where-Object Status -eq 'Stopped' | Sort-Object DisplayNameGet-Process | Where-Object Name -eq 'svchost' # oder: Get-Process -Name svchostGet-Service | Where-Object Status -eq 'Running' | Measure-Object- Gib die ersten drei Dienste als Liste mit allen Eigenschaften aus (
Format-List *). - Speichere
NameundStatusaller Dienste mitExport-CsvinC:\Kurs\Ausgabe\dienste.csv. - Öffne die Datei mit
Get-Content. Sieht sie so aus, wie du es erwartest? - Probiere es noch einmal, aber mit
Format-TablevorExport-Csv. Was passiert und warum?
Lösung anzeigen
Get-Service | Select-Object -First 3 | Format-List *Get-Service | Select-Object Name, Status | Export-Csv C:\Kurs\Ausgabe\dienste.csvGet-Content C:\Kurs\Ausgabe\dienste.csv | Select-Object -First 5Get-Service | Format-Table Name, Status | Export-Csv C:\Kurs\Ausgabe\falsch.csvGet-Content C:\Kurs\Ausgabe\falsch.csv | Select-Object -First 5Format-Table erzeugt Formatierungsobjekte, die nur für die Bildschirmausgabe gedacht sind. Export-Csv bekommt dann keine Dienste mehr, sondern Formatierungsinformationen. Format-* gehört ans Ende der Pipeline.
Erstelle einen Textbericht C:\Kurs\Ausgabe\top5.txt mit den fünf Prozessen, die am meisten Arbeitsspeicher belegen. Er soll Name, Id und den Speicher enthalten.
Lösung anzeigen
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5 -Property Name, Id, WorkingSet | Out-File C:\Kurs\Ausgabe\top5.txtGet-Content C:\Kurs\Ausgabe\top5.txtOut-File schreibt die Anzeige so, wie sie in der Konsole aussähe. Für Weiterverarbeitung nimmst du stattdessen Export-Csv.
Variablen und Datentypen
Abschnitt betitelt „Variablen und Datentypen“- Lege Variablen
$vornameund$alteran und gib den Satz „Ich bin Max und 30 Jahre alt.” mit Hilfe der Variablen aus (Zeichenketten in Anführungszeichen, Variablen darin). - Ändere
$alterund gib den Satz erneut aus. - Lies mit
$env:COMPUTERNAMEund$env:USERNAMERechner- und Benutzernamen. - Setze
$env:KURS = "PowerShell in 3 Tagen"und prüfe mitGet-ChildItem Env:, ob die Variable erscheint. Starte danach eine neue PowerShell. Ist sie noch da?
Lösung anzeigen
$vorname = "Max"$alter = 30"Ich bin $vorname und $alter Jahre alt."$alter = 31"Ich bin $vorname und $alter Jahre alt."
$env:COMPUTERNAME$env:USERNAME$env:KURS = "PowerShell in 3 Tagen"Get-ChildItem Env: | Where-Object Name -eq 'KURS'In der neuen Sitzung ist KURS weg: $env:-Änderungen gelten nur für die laufende Sitzung.
- Was ergibt
"5" + "5", was5 + 5? Und"5" + 5? Und5 + "5"? Erkläre die Ergebnisse. Prüfe mit.GetType(), welchen Typ jedes Ergebnis hat. - Berechne
12 + 8,15 / 3,17 % 4und speichere jedes Ergebnis in einer Variable. - Berechne die Fläche eines Rechtecks mit Länge 7 und Breite 5.
- Wie viele Kilobyte sind
5MB? Nutze die Einheiten von PowerShell. - Berechne
(5 + 3) * 2und5 + 3 * 2. Warum sind die Ergebnisse verschieden?
Lösung anzeigen
"5" + "5" # 55 (Text)5 + 5 # 10 (Zahl)"5" + 5 # 55 (links steht Text: der Operator "+" verkettet)5 + "5" # 10 (links steht eine Zahl: der Text wird in eine Zahl umgewandelt)("5" + 5).GetType().Name # String
$summe = 12 + 8$quotient = 15 / 3$rest = 17 % 4
$flaeche = 7 * 55MB / 1KB # 5120(5 + 3) * 2 # 165 + 3 * 2 # 11 (Punkt vor Strich)Der Typ des linken Operanden entscheidet, was + tut.
$zeile = " Anna;Berlin;IT "- Entferne die Leerzeichen am Anfang und Ende.
- Zerlege die Zeile an den Semikolons in ihre drei Bestandteile.
- Ersetze
BerlindurchHamburg. - Gib den dritten Teil in Großbuchstaben aus (Tipp:
.ToUpper()). - Baue aus den Teilen mit dem Format-Operator
-fden Satz „Anna arbeitet in Hamburg (Abteilung IT).” zusammen.
Lösung anzeigen
$zeile = " Anna;Berlin;IT "$sauber = $zeile.Trim()$teile = $sauber.Split(";")$neu = $sauber -replace "Berlin", "Hamburg"$teile[2].ToUpper()"{0} arbeitet in {1} (Abteilung {2})." -f $teile[0], "Hamburg", $teile[2]- Erstelle ein Array
$obstmit drei Sorten. Gib das zweite Element und die Anzahl der Elemente aus. Hänge eine vierte Sorte an. - Erstelle eine Hashtable
$automitMarke,ModellundBaujahr. Gib den Wert vonModellaus. FügeFarbehinzu. - Erstelle mit
[PSCustomObject]ein Objekt$servermitName,RolleundRAMGBund zeige es mitFormat-Tablean. - Erstelle ein Array mit drei solchen Objekten (verschiedene Server) und sortiere es nach
RAMGBabsteigend.
Lösung anzeigen
$obst = @("Apfel", "Banane", "Kirsche")$obst[1]$obst.Count$obst += "Dattel"
$auto = @{ Marke = "VW"; Modell = "Golf"; Baujahr = 2020 }$auto.Modell$auto["Farbe"] = "Blau"
$server = [PSCustomObject]@{ Name = "SRV01"; Rolle = "Datei"; RAMGB = 16 }$server | Format-Table
$liste = @( [PSCustomObject]@{ Name = "SRV01"; Rolle = "Datei"; RAMGB = 16 }, [PSCustomObject]@{ Name = "SRV02"; Rolle = "Web"; RAMGB = 8 }, [PSCustomObject]@{ Name = "SRV03"; Rolle = "Datenbank"; RAMGB = 64 })$liste | Sort-Object RAMGB -Descending- Finde heraus, wie viel freien Speicherplatz Laufwerk
C:hat. Tipp:Get-PSDriveundGet-Member. - Gib nur die Zahl für den freien Speicher in Gigabyte (gerundet auf eine Nachkommastelle) aus. Tipp: Eigenschaft ansprechen mit
.Free, Einheit1GB, Runden mit[math]::Round(Zahl, 1).
Lösung anzeigen
Get-PSDrive -Name C | Get-MemberGet-PSDrive -Name C | Select-Object Name, Used, Free
$laufwerk = Get-PSDrive -Name C[math]::Round($laufwerk.Free / 1GB, 1)Die Eigenschaft Free ist eine Zahl in Bytes. Du musst keinen Text zerlegen: Objekt, Eigenschaft, rechnen.