PowerShell Trainer – Fragen und Antworten zu Parametern

Dieser Trainer wiederholt die wichtigsten Prüfungs- und Praxisbegriffe zu PowerShell-Parametern, benannten Parametern, Parameter-Dekoratoren, Aliasen, Switch-Parametern, ValidateSet, Dot-Sourcing und der Funktion check-userprofile.

Erst selbst antworten, dann prüfen oder Lösung anzeigen.

1. Grundlagen

Frage 1: Was ist ein Parameter in PowerShell?
Ein Parameter ist eine Zusatzangabe zu einem PowerShell-Befehl, Skript oder einer Funktion. Er steuert genauer, was der Befehl tun soll oder worauf er angewendet wird.
Get-Service -Name "Spooler"
Hier ist -Name der Parameter.
Frage 2: Was ist ein Parameterwert?
Der Parameterwert ist der konkrete Wert, der einem Parameter übergeben wird.
Get-Service -Name "Spooler"
Hier ist "Spooler" der Parameterwert.
Frage 3: Was ist ein benannter Parameter?
Ein benannter Parameter wird beim Aufruf mit seinem Parameternamen angegeben.
check-userprofile -name "Felix"
Hier ist -name ein benannter Parameter.
Frage 4: Was ist ein positioneller Parameter?
Ein positioneller Parameter kann ohne Parameternamen übergeben werden. PowerShell erkennt ihn anhand seiner Position.
check-userprofile "Felix"
Das funktioniert, wenn der Parameter mit Position = 0 definiert wurde.

2. param()-Block und Parameter-Dekorator

Frage 5: Wofür verwendet man den param()-Block?
Mit param() definiert man eigene Parameter für ein PowerShell-Skript oder eine Funktion.
param(
    [string]$name
)
Frage 6: Was macht [Parameter(Mandatory = $true)]?
Dieser Parameter-Dekorator macht einen Parameter verpflichtend. Wenn der Wert fehlt, fragt PowerShell danach.
[Parameter(Mandatory = $true)]
[string]$name
Frage 7: Was macht Position = 0?
Position = 0 bedeutet, dass der Parameter an erster Stelle nach dem Funktionsnamen stehen darf.
check-userprofile "Felix"
Der Wert "Felix" wird dann automatisch dem Parameter $name zugeordnet.
Frage 8: Ergänze den Pflichtparameter $name mit Position 0.
param(
    [Parameter(
        Mandatory = $true,
        Position = 0
    )]
    [string]$name
)

3. Aliase

Frage 9: Was ist ein Alias bei einem Parameter?
Ein Alias ist ein alternativer Name für einen Parameter. Dadurch kann derselbe Parameter mit verschiedenen Namen aufgerufen werden.
[Alias("user", "n")]
[string]$name
Frage 10: Welche Aliase soll $name laut Aufgabe haben?
Der Parameter $name soll die Aliase user und n besitzen.
check-userprofile -user "Felix"
check-userprofile -n "Felix"
Frage 11: Ergänze das Alias-Attribut für $name.
[Parameter(Mandatory = $true, Position = 0)]
[Alias("user", "n")]
[string]$name

4. Switch-Parameter

Frage 12: Was ist ein Switch-Parameter?
Ein Switch-Parameter ist ein Schalterparameter ohne eigenen Wert. Er ist aktiv, sobald er angegeben wird.
check-userprofile -name "Felix" -size
Hier wird -size nur angegeben, aber bekommt keinen extra Wert.
Frage 13: Welcher Datentyp wird für einen Switch-Parameter verwendet?
Der Datentyp lautet:
[switch]
Frage 14: Welche Aliase soll $size laut Aufgabe haben?
Der Parameter $size soll die Aliase length und s besitzen.
[Alias("length", "s")]
[switch]$size

5. ValidateSet und Detailparameter

Frage 15: Wofür verwendet man ValidateSet?
ValidateSet legt fest, welche Werte für einen Parameter erlaubt sind. Andere Werte werden abgelehnt.
[ValidateSet("All", "BySize", "ByPercent")]
[string]$detail
Frage 16: Welche drei Werte darf $detail annehmen?
Der Parameter $detail darf diese Werte annehmen:
Wert Bedeutung
All Gesamtzahl aller Dateien
BySize Anzahl der Dateien nach Größenklassen
ByPercent Prozentualer Anteil nach Größenklassen
Frage 17: Was macht ValidateNotNullOrEmpty?
ValidateNotNullOrEmpty() verhindert, dass ein Parameter leer oder NULL ist.
[ValidateNotNullOrEmpty()]
[string]$detail
Frage 18: Ergänze den Detailparameter vollständig.
[Parameter()]
[ValidateNotNullOrEmpty()]
[ValidateSet("All", "BySize", "ByPercent")]
[string]$detail

6. Dot-Sourcing

Frage 19: Was bedeutet Dot-Sourcing in PowerShell?
Beim Dot-Sourcing wird ein Skript in die aktuelle PowerShell-Sitzung geladen. Dadurch stehen die darin enthaltenen Funktionen danach direkt zur Verfügung.
. .\check-userprofile.ps1
Wichtig: Punkt, Leerzeichen, Skriptpfad.
Frage 20: Wie bindet man das Skript check-userprofile.ps1 per Dot-Sourcing ein?
. .\check-userprofile.ps1
Vor dem Skriptpfad steht ein Punkt und danach ein Leerzeichen.

7. Userprofile-Aufgabe

Frage 21: Welche WMI-Klasse wird verwendet, um lokale Benutzerprofile zu ermitteln?
Die Klasse lautet:
Win32_UserProfile
Beispiel:
Get-WmiObject Win32_UserProfile
Frage 22: In welcher Eigenschaft steht der lokale Profilpfad?
Der lokale Profilpfad steht in der Eigenschaft:
LocalPath
Frage 23: Welcher Befehl ermittelt alle Dateien rekursiv im Home-Verzeichnis?
$files = Get-ChildItem -Path $homeverzeichnis -Recurse -Force -File -ErrorAction SilentlyContinue
Wichtig: -File braucht den Bindestrich.
Frage 24: Warum verwendet man -ErrorAction SilentlyContinue?
Damit Zugriffsfehler oder andere nicht kritische Fehler beim rekursiven Durchsuchen nicht störend angezeigt werden. Das Skript läuft trotzdem weiter.

8. Größenklassen und Berechnung

Frage 25: Wie berechnet man die Anzahl aller Dateien in $files?
$gesamtAnzahl = $files.Count
Frage 26: Wie berechnet man die Gesamtgröße aller Dateien?
$gesamtGroesse = ($files | Measure-Object -Property Length -Sum).Sum
Frage 27: Welche Eigenschaft enthält die Dateigröße?
Die Dateigröße steht in der Eigenschaft:
Length
Frage 28: Welche vier Größenklassen werden in der Aufgabe verwendet?
Die vier Größenklassen sind:
Klasse Bedeutung
bis 1 KiB Dateien kleiner oder gleich 1 KiB
1 KiB bis 1 MiB Dateien größer als 1 KiB und kleiner oder gleich 1 MiB
1 MiB bis 1 GiB Dateien größer als 1 MiB und kleiner oder gleich 1 GiB
Größer Dateien größer als 1 GiB

9. Aufrufe verstehen

Frage 29: Was bedeutet dieser Aufruf?
check-userprofile -name "Felix" -size
Die Funktion wertet das Benutzerprofil von Felix aus. Zusätzlich wird wegen -size auch die Gesamtgröße aller Dateien ausgegeben.
Frage 30: Was bedeutet dieser Aufruf?
check-userprofile "Felix"
Der Wert "Felix" wird dem Parameter $name zugeordnet, weil dieser mit Position = 0 definiert wurde.
Frage 31: Was bedeutet dieser Aufruf?
check-userprofile -n "Felix" -s -detail ByPercent
-n ist der Alias für -name. -s ist der Alias für -size. -detail ByPercent fordert die prozentuale Verteilung nach Größenklassen an.

10. Mini-Abschlusstest

Abschlusstest: Welche Bestandteile braucht der vollständige Parameterblock?
param(
    [Parameter(
        Mandatory = $true,
        Position = 0
    )]
    [Alias("user", "n")]
    [string]$name,

    [Parameter()]
    [Alias("length", "s")]
    [switch]$size,

    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [ValidateSet("All", "BySize", "ByPercent")]
    [string]$detail
)

11. Merksätze

Merksatz 1:
Ein Parameter ist eine Eingabe für ein Cmdlet, Skript oder eine Funktion.
Merksatz 2:
Mit param() definiert man eigene Parameter.
Merksatz 3:
Mandatory = $true macht einen Parameter verpflichtend.
Merksatz 4:
Position = 0 erlaubt den Aufruf ohne Parameternamen an erster Stelle.
Merksatz 5:
[Alias()] legt alternative Parameternamen fest.
Merksatz 6:
[switch] erstellt einen Schalterparameter ohne eigenen Wert.
Merksatz 7:
[ValidateSet()] beschränkt erlaubte Eingaben auf feste Werte.