Grundlagen
- Thema 0 - Powershell Wissen
- Grundlagen - Operatoren
- Grundlagen Zusammenfassung
- PowerShell – Parameter
- PowerShell – Eigene Parameter definieren
Thema 0 - Powershell Wissen
Powershell
ist eine lose typisierte Programmiersprache und arbeitet mit implizierten Konvertierungen
Skriptsprache: eine Programmiersprache die für Skripte verwendet wird, arbeitet mit meist nach dem Stapelverarbeitungsmodus und ist meist in interpritiert. (Interpreter)
Grundlagen - Operatoren
PowerShell – Grundlagen: Operatoren
Überblick
Operatoren in PowerShell werden verwendet für:
- Vergleiche
- String-Suche
- Listenprüfungen
- Berechnungen
- Zuweisungen
Vergleichsoperatoren
-eq # gleich (equal)
-ne # ungleich (not equal)
-gt # größer als (greater than)
-lt # kleiner als (less than)
-ge # größer gleich (greater equal)
-le # kleiner gleich (less equal)
Clear-Host
"Apfel" -eq "Birne"
"Apfel" -ceq "apfel" # case sensitive Vergleich
12 -eq 12 # true
12 -ne 15 # true
12 -gt 9 # true
12 -lt 9 # false
12 -ge 11 # true
12 -le 12 # true
"Apfel" -lt "Birne" # alphabetischer Vergleich
Grundlagen Zusammenfassung
Variablen & Strings
- Variablen starten mit
$und werden mit=gesetzt →$x = 5(Typ automatisch) - Zugriff immer mit
$ -
"..."→ Variable wird ersetzt (ausgewertet) →"Wert: $x"→ Wert: 5 -
'...'→ Variable bleibt Text →'Wert: $x'→ Wert: $x -
=→ Zuweisung | Vergleich z. B. mit-eq
👉 Merksatz:
Doppelte Anführungszeichen = Wert wird eingesetzt
Einfache Anführungszeichen = bleibt nur Text
Datentypen
- PowerShell ist dynamisch typisiert → Typ wird automatisch erkannt (
$x = 5,$y = "Text") - Häufige Typen: String (
"Text"), Int (5), Double (3.14), Boolean ($true/$false), Array (1,2,3) - Typ kann explizit gesetzt werden →
[int]$x = 5,[string]$name = "Derick" - Typ prüfen →
$x.GetType()
👉 Wichtig:
- Rechnen nur mit Zahlen sinnvoll (
"5" + 5→ kann unerwartet sein) - Arrays werden mit Komma erstellt →
$arr = 1,2,3
👉 Merksatz:
Typ kommt automatisch – kann aber festgelegt werden
- Ausgabe →
-
Write-Host "Text"(nur Anzeige, nicht weiter nutzbar) -
Write-Output "Text"oder"Text"(empfohlen, weiterverarbeitbar)
-
- Eingabe →
$x = Read-Host "Frage" - Datum →
Get-Date - Konsole löschen →
Clear-Host/cls(beides leert die Konsole)
👉 Beispiele anzeigen
# Ausgabe 'Write-Output'
# Variante 1 (offiziell)
Write-Output "Hallo" # → Ausgabe: Hallo
# Variante 2 (Kurzform)
"Hallo" # → Ausgabe: Hallo
# Konsole löschen 'cls'
# Variante 1 (voller Befehl)
Clear-Host # → Konsole wird geleert
# Variante 2 (Kurzform / Alias)
cls # → Konsole wird geleert
👉 Merksatz: Write-Output besser als Write-Host | Read-Host Input einlesen | Cls entspricht Clear-Host
Rechnen
- Grundrechenarten →
+-*/ - Beispiele →
$x = 5 + 3|$y = 10 - 2|$z = 4 * 2|$a = 8 / 2 - Punkt vor Strich gilt →
$r = 2 + 3 * 4→ Ergebnis: 14 - Klammern steuern Reihenfolge →
$r = (2 + 3) * 4→ Ergebnis: 20 - Zuweisung kombiniert →
$x += 5(gleich$x = $x + 5)
👉 Beispiel anzeigen
# Variante 1 (lang)
$x = $x + 5 # → erhöht $x um 5
# Variante 2 (kurz)
$x += 5 # → erhöht $x um 5
👉 Merksatz: Operatoren wie Mathe | Reihenfolge beachten | Klammern nutzen
Operatoren
- Vergleich →
-eq-ne-gt-lt→ vergleichen Werte (True/False) - Rechnen →
+-*/ - Zuweisung →
=+= - String →
-like(Wildcard) |-match(Regex) - Listen →
-contains(Liste enthält Wert) |-in(Wert in Liste) - Logisch →
-and-or-not - Zusatz →
-not(verneint) |-c(case-sensitive, z. B.-ceq)
👉 Beispiele anzeigen
# Vergleich
5 -eq 5 # → True
5 -gt 3 # → True
# Rechnen
2 + 3 # → 5
# Zuweisung
$x = 5
$x += 2 # → 7
# String
"Test" -like "T*" # → True
"Test" -match "es" # → True
# Listen
1,2,3 -contains 2 # → True
2 -in 1,2,3 # → True
# Logisch
($true -and $false) # → False
# Zusatz
5 -ne 3 # → True
"Test" -ceq "test" # → False (Groß/Klein beachten)
PowerShell Verzweigungen (kurz & knapp)
-
if / else→ führt Code je nach Bedingung aus -
switch→ prüft eine Variable gegen mehrere Fälle (übersichtlicher als viele ifs)
👉 Beispiele anzeigen
# if / else
$x = 10
if ($x -gt 5) {
"größer als 5"
} else {
"kleiner oder gleich 5"
}
# switch
$farbe = "rot"
switch ($farbe) {
"rot" { "Stop" }
"grün" { "Go" }
default { "Unbekannt" }
}
👉 Merksatz: if = einfache Entscheidung | switch = viele Fälle übersichtlich
PowerShell – Parameter
Grundidee
Parameter sind Zusatzangaben zu einem PowerShell-Befehl.
Mit Parametern legt man fest, was genau ein Cmdlet tun soll oder wie es arbeiten soll.
Ein PowerShell-Befehl besteht meistens aus:
| Bestandteil | Bedeutung |
|---|---|
| Cmdlet | Der eigentliche PowerShell-Befehl |
| Parameter | Zusatzangabe, die das Cmdlet genauer steuert |
| Parameterwert | Der konkrete Wert, der an den Parameter übergeben wird |
Beispiel:
Get-Process -Name "notepad"
Bedeutung:
| Teil | Erklärung |
|---|---|
| Get-Process | Cmdlet |
| -Name | Parameter |
| "notepad" | Parameterwert |
PowerShell zeigt dadurch nicht alle Prozesse an, sondern nur den Prozess mit dem Namen notepad.
Merksatz
Cmdlet = Was soll passieren?
Parameter = Wie genau soll es passieren?
Parameterwert = Womit oder worauf soll es passieren?
Typischer Aufbau
Ein PowerShell-Befehl mit Parameter hat meistens diesen Aufbau:
Cmdlet -Parameter Wert
Beispiel:
Get-Service -Name "Spooler"
Bedeutung:
| Teil | Erklärung |
|---|---|
| Get-Service | Dienste anzeigen |
| -Name | Nach einem bestimmten Dienstnamen suchen |
| "Spooler" | Druckwarteschlange als konkreter Dienst |
Warum Parameter wichtig sind
Ohne Parameter führt ein Cmdlet oft eine allgemeine Aktion aus.
Beispiel:
Get-Service
Dieser Befehl zeigt viele Dienste an.
Mit Parameter wird die Ausgabe gezielter:
Get-Service -Name "Spooler"
Jetzt wird nur der Dienst Spooler angezeigt.
Parameter helfen also dabei, Befehle genauer, sicherer und gezielter auszuführen.
Parameter mit Wert
Viele Parameter benötigen einen Wert.
Beispiel:
Get-ChildItem -Path "C:\Temp"
Hier braucht der Parameter -Path einen konkreten Pfad.
Weitere Beispiele:
Get-Process -Name "notepad"
Get-Service -Name "Spooler"
Get-ChildItem -Filter "*.txt"
Typische Parameter mit Wert:
| Parameter | Bedeutung |
|---|---|
| -Name | Name eines Objekts |
| -Path | Pfad zu Datei oder Ordner |
| -Filter | Filter für Dateien oder Objekte |
| -ComputerName | Zielcomputer |
| -Credential | Zugangsdaten |
| -Destination | Zielpfad |
| -Source | Quellpfad |
Schalterparameter
Ein Schalterparameter braucht keinen eigenen Wert.
Er ist aktiv, sobald man ihn angibt.
Beispiel:
Get-ChildItem -Recurse
Der Parameter -Recurse bedeutet, dass auch Unterordner durchsucht werden.
Weitere Beispiele:
Remove-Item "C:\Temp\test.txt" -Force
Get-ChildItem -Hidden
Stop-Process -Name "notepad" -Force
Typische Schalterparameter:
| Parameter | Bedeutung |
|---|---|
| -Recurse | Unterordner einbeziehen |
| -Force | Aktion erzwingen |
| -Hidden | Versteckte Elemente anzeigen |
| -WhatIf | Zeigt, was passieren würde, ohne es auszuführen |
| -Confirm | Fragt vor der Ausführung nach Bestätigung |
Wichtige Sicherheitsparameter
Besonders wichtig sind -WhatIf und -Confirm.
Diese Parameter helfen, gefährliche Aktionen zu prüfen.
Beispiel:
Remove-Item "C:\Temp\test.txt" -WhatIf
PowerShell zeigt nur an, was gelöscht werden würde.
Die Datei wird nicht wirklich gelöscht.
Beispiel mit Bestätigung:
Remove-Item "C:\Temp\test.txt" -Confirm
PowerShell fragt vor dem Löschen nach.
Das ist besonders wichtig bei Befehlen wie:
| Cmdlet | Risiko |
|---|---|
| Remove-Item | Dateien oder Ordner löschen |
| Stop-Process | Prozesse beenden |
| Restart-Computer | Computer neu starten |
| Set-Item | Werte ändern |
| New-Item | Neue Dateien, Ordner oder Einträge erstellen |
Positionelle Parameter
Manche Parameter müssen nicht ausgeschrieben werden, weil PowerShell anhand der Position erkennt, welcher Parameter gemeint ist.
Beispiel mit ausgeschriebenem Parameter:
Get-ChildItem -Path "C:\Temp"
Kurzform:
Get-ChildItem "C:\Temp"
PowerShell erkennt hier, dass "C:\Temp" der Wert für -Path ist.
Für die Prüfung und für saubere Dokumentation ist die ausgeschriebene Variante besser:
Get-ChildItem -Path "C:\Temp"
Sie ist klarer und leichter nachvollziehbar.
Mehrere Parameter kombinieren
Ein Cmdlet kann mehrere Parameter gleichzeitig verwenden.
Beispiel:
Get-ChildItem -Path "C:\Temp" -Filter "*.txt" -Recurse
Bedeutung:
| Teil | Erklärung |
|---|---|
| Get-ChildItem | Ordnerinhalt anzeigen |
| -Path "C:\Temp" | Im Ordner C:\Temp suchen |
| -Filter "*.txt" | Nur Textdateien anzeigen |
| -Recurse | Auch Unterordner durchsuchen |
Der Befehl sucht also im Ordner C:\Temp und allen Unterordnern nach Dateien mit der Endung .txt.
Parameter und Datentypen
Parameter erwarten oft bestimmte Datentypen.
Beispiele:
| Datentyp | Beispiel | Bedeutung |
|---|---|---|
| String | "notepad" | Text |
| Integer | 10 | Ganze Zahl |
| Boolean | $true / $false | Wahr oder falsch |
| Array | "PC1","PC2","PC3" | Mehrere Werte |
| Credential | Benutzername/Kennwort | Zugangsdaten |
| Switch | -Force | Schalterparameter ohne Wert |
Beispiel mit mehreren Namen:
Get-Service -Name "Spooler","WinRM"
Hier bekommt der Parameter -Name mehrere Werte.
Parameter und Anführungszeichen
Texte mit Leerzeichen sollten in Anführungszeichen geschrieben werden.
Beispiel:
Get-ChildItem -Path "C:\Meine Dateien"
Ohne Anführungszeichen könnte PowerShell den Pfad falsch interpretieren.
Bei einfachen Werten ohne Leerzeichen sind Anführungszeichen oft nicht zwingend nötig:
Get-Service -Name Spooler
Trotzdem ist es beim Lernen oft übersichtlicher, Zeichenketten mit Anführungszeichen zu schreiben.
Parameter mit Wildcards
Viele Parameter unterstützen Platzhalterzeichen.
Das wichtigste Platzhalterzeichen ist:
| Zeichen | Bedeutung |
|---|---|
| * | Steht für beliebig viele Zeichen |
| ? | Steht für genau ein Zeichen |
Beispiel:
Get-Service -Name "Win*"
Zeigt Dienste an, deren Name mit Win beginnt.
Beispiel:
Get-ChildItem -Path "C:\Temp" -Filter "*.txt"
Zeigt alle Dateien mit der Endung .txt an.
Pflichtparameter
Manche Parameter sind erforderlich.
Wenn ein Pflichtparameter fehlt, fragt PowerShell nach dem fehlenden Wert.
Beispiel:
Read-Host -Prompt
PowerShell erwartet hier einen Wert für -Prompt.
Besser:
Read-Host -Prompt "Bitte Namen eingeben"
Optionale Parameter
Viele Parameter sind optional.
Beispiel:
Get-Process
Dieser Befehl funktioniert ohne weitere Parameter.
Mit optionalem Parameter wird er genauer:
Get-Process -Name "notepad"
Der Parameter -Name ist hier nicht zwingend notwendig, aber nützlich.
Parameter und Pipeline
PowerShell arbeitet objektorientiert.
Die Pipeline übergibt nicht nur Text, sondern Objekte von einem Befehl zum nächsten.
Beispiel:
Get-Process -Name "notepad" | Stop-Process
Bedeutung:
| Teil | Erklärung |
|---|---|
| Get-Process -Name "notepad" | Sucht den Prozess notepad |
| Pipe-Zeichen | Übergibt das gefundene Objekt weiter |
| Stop-Process | Beendet den übergebenen Prozess |
Noch deutlicher:
Get-Process -Name "notepad" | Stop-Process -Force
Hier beendet PowerShell den Prozess notepad erzwungen.
Pipeline-Parameter
Einige Parameter können Werte aus der Pipeline annehmen.
Beispiel:
Get-Service -Name "Spooler" | Stop-Service
Der Dienst wird zuerst gesucht und dann an Stop-Service weitergegeben.
PowerShell erkennt anhand des Objekttyps, welcher Parameter des nächsten Cmdlets den Wert annehmen kann.
Das nennt man auch:
| Begriff | Bedeutung |
|---|---|
| Pipeline Input | Eingabe aus der Pipeline |
| ByValue | Übergabe anhand des Objekttyps |
| ByPropertyName | Übergabe anhand eines passenden Eigenschaftsnamens |
Für die IHK reicht meistens das Grundverständnis:
Die Pipeline übergibt das Ergebnis eines Befehls an den nächsten Befehl. Parameter können diese übergebenen Werte weiterverarbeiten.
Common Parameters
Viele PowerShell-Cmdlets besitzen gemeinsame Standardparameter.
Diese nennt man Common Parameters.
Wichtige Beispiele:
| Parameter | Bedeutung |
|---|---|
| -Verbose | Gibt ausführlichere Informationen aus |
| -Debug | Gibt Debug-Informationen aus |
| -ErrorAction | Legt fest, wie Fehler behandelt werden |
| -ErrorVariable | Speichert Fehler in einer Variable |
| -WarningAction | Legt fest, wie Warnungen behandelt werden |
| -OutVariable | Speichert die Ausgabe in einer Variable |
| -PipelineVariable | Speichert Pipeline-Objekte in einer Variable |
Beispiel:
Get-Service -Name "Spooler" -Verbose
Mit -Verbose können zusätzliche Informationen angezeigt werden.
Fehlerbehandlung mit Parametern
Ein wichtiger Parameter ist -ErrorAction.
Damit legt man fest, wie PowerShell bei Fehlern reagieren soll.
Beispiel:
Get-Item -Path "C:\NichtVorhanden" -ErrorAction SilentlyContinue
Bedeutung:
PowerShell gibt keinen sichtbaren Fehler aus, wenn der Pfad nicht existiert.
Häufige Werte für -ErrorAction:
| Wert | Bedeutung |
|---|---|
| Continue | Fehler anzeigen und weitermachen |
| Stop | Fehler anzeigen und Ausführung stoppen |
| SilentlyContinue | Fehler nicht anzeigen und weitermachen |
| Inquire | Nachfrage anzeigen |
| Ignore | Fehler ignorieren |
Parameter herausfinden
Man muss nicht alle Parameter auswendig kennen.
PowerShell bietet Hilfe-Befehle.
Wichtige Befehle:
Get-Help Get-ChildItem
Zeigt Hilfe zum Cmdlet an.
Get-Help Get-ChildItem -Detailed
Zeigt ausführlichere Informationen.
Get-Help Get-ChildItem -Examples
Zeigt Beispiele.
Get-Command Get-ChildItem -Syntax
Zeigt die Syntax des Cmdlets.
Get-Command Get-ChildItem | Select-Object -ExpandProperty Parameters
Zeigt die verfügbaren Parameter eines Cmdlets.
Syntax in der Hilfe verstehen
Bei PowerShell-Hilfeausgaben sieht man oft eckige Klammern.
Beispiel:
Get-ChildItem [[-Path] <string[]>] [-Filter <string>] [-Recurse]
Bedeutung:
| Schreibweise | Bedeutung |
|---|---|
| [-Path] | Parameter ist optional |
| <string[]> | Erwartet einen oder mehrere Textwerte |
| [-Filter |
Optionaler Parameter mit Textwert |
| [-Recurse] | Optionaler Schalterparameter |
Wichtig:
Eckige Klammern bedeuten in der Syntax meistens: optional.
Cmdlet-Namen und Parameter
PowerShell-Cmdlets folgen meistens dem Verb-Nomen-Schema.
Beispiele:
| Cmdlet | Bedeutung |
|---|---|
| Get-Process | Prozesse abrufen |
| Stop-Process | Prozess beenden |
| Get-Service | Dienste abrufen |
| Start-Service | Dienst starten |
| Stop-Service | Dienst stoppen |
| Get-ChildItem | Ordnerinhalt anzeigen |
| Remove-Item | Datei/Ordner löschen |
| New-Item | Datei/Ordner erstellen |
| Copy-Item | Datei/Ordner kopieren |
| Move-Item | Datei/Ordner verschieben |
Parameter passen sich an das jeweilige Cmdlet an.
Beispiel:
Get-Service -Name "Spooler"
Stop-Service -Name "Spooler"
Beide Befehle nutzen -Name, aber mit unterschiedlicher Aktion.
Aliase und Parameter
PowerShell besitzt auch Kurzformen, sogenannte Aliase.
Beispiele:
| Alias | Eigentliches Cmdlet |
|---|---|
| dir | Get-ChildItem |
| ls | Get-ChildItem |
| cd | Set-Location |
| copy | Copy-Item |
| del | Remove-Item |
| cat | Get-Content |
Beispiel:
dir "C:\Temp"
Das entspricht ungefähr:
Get-ChildItem -Path "C:\Temp"
Für die IHK und Dokumentation ist das ausgeschriebene Cmdlet besser, weil es eindeutiger ist.
Parameter in eigenen Skripten
Auch eigene PowerShell-Skripte können Parameter besitzen.
Beispiel:
param(
[string]$Name
)
Write-Output "Hallo $Name"
Wenn das Skript zum Beispiel gruss.ps1 heißt, kann man es so starten:
.\gruss.ps1 -Name "Felix"
Ausgabe:
Hallo Felix
Mehrere eigene Parameter
Beispiel:
param(
[string]$Name,
[int]$Alter
)
Write-Output "$Name ist $Alter Jahre alt."
Aufruf:
.\person.ps1 -Name "Felix" -Alter 30
Hier sind:
| Teil | Bedeutung |
|---|---|
| -Name | Parameter für den Namen |
| "Felix" | Wert für den Namen |
| -Alter | Parameter für das Alter |
| 30 | Wert für das Alter |
Pflichtparameter in eigenen Skripten
Man kann Parameter als verpflichtend kennzeichnen.
Beispiel:
param(
[Parameter(Mandatory=$true)]
[string]$Name
)
Write-Output "Hallo $Name"
Wenn der Parameter -Name beim Start fehlt, fragt PowerShell nach.
Parameter mit Standardwert
Parameter können Standardwerte besitzen.
Beispiel:
param(
[string]$Name = "Benutzer"
)
Write-Output "Hallo $Name"
Wenn kein Name angegeben wird, verwendet PowerShell automatisch Benutzer.
Parameter validieren
PowerShell kann Parameterwerte prüfen.
Beispiel mit erlaubten Werten:
param(
[ValidateSet("Start","Stop","Restart")]
[string]$Aktion
)
Write-Output "Gewählte Aktion: $Aktion"
Jetzt darf der Parameter -Aktion nur bestimmte Werte annehmen:
| Erlaubter Wert |
|---|
| Start |
| Stop |
| Restart |
Beispiel:
.\dienst.ps1 -Aktion Start
Ein falscher Wert würde abgelehnt werden.
Typische IHK-relevante Beispiele
Dienst anzeigen
Get-Service -Name "Spooler"
Zeigt den Dienst Spooler an.
Dienst starten
Start-Service -Name "Spooler"
Startet den Dienst Spooler.
Dienst stoppen
Stop-Service -Name "Spooler"
Stoppt den Dienst Spooler.
Prozess anzeigen
Get-Process -Name "notepad"
Zeigt den Prozess notepad an.
Prozess beenden
Stop-Process -Name "notepad"
Beendet den Prozess notepad.
Dateien in einem Ordner anzeigen
Get-ChildItem -Path "C:\Temp"
Zeigt den Inhalt des Ordners C:\Temp an.
Dateien rekursiv suchen
Get-ChildItem -Path "C:\Temp" -Filter "*.log" -Recurse
Sucht im Ordner C:\Temp und allen Unterordnern nach .log-Dateien.
Datei löschen mit Sicherheitsprüfung
Remove-Item -Path "C:\Temp\test.txt" -WhatIf
Zeigt an, was gelöscht werden würde, löscht aber nicht wirklich.
Datei löschen mit Bestätigung
Remove-Item -Path "C:\Temp\test.txt" -Confirm
Fragt vor dem Löschen nach.
Wichtige Begriffe
| Begriff | Erklärung |
|---|---|
| Cmdlet | PowerShell-Befehl im Verb-Nomen-Schema |
| Parameter | Zusatzangabe zu einem Cmdlet |
| Parameterwert | Konkreter Wert zu einem Parameter |
| Schalterparameter | Parameter ohne eigenen Wert |
| Pflichtparameter | Muss angegeben werden |
| Optionaler Parameter | Kann angegeben werden, muss aber nicht |
| Positioneller Parameter | Kann ohne Parameternamen verwendet werden |
| Pipeline | Übergibt Objekte von einem Befehl zum nächsten |
| Common Parameters | Gemeinsame Standardparameter vieler Cmdlets |
| Alias | Kurzname für ein Cmdlet |
Häufige Fehler
| Fehler | Erklärung |
|---|---|
| Parameter falsch geschrieben | PowerShell erkennt den Parameter nicht |
| Wert fehlt | Ein Parameter erwartet einen Wert |
| Falscher Datentyp | Zum Beispiel Text statt Zahl |
| Pfad ohne Anführungszeichen | Fehler bei Leerzeichen im Pfad möglich |
| Zu gefährlicher Befehl ohne -WhatIf | Aktion wird direkt ausgeführt |
| Alias statt Cmdlet in Dokumentation | Kann unklar oder weniger professionell wirken |
Gute Praxis
| Empfehlung | Grund |
|---|---|
| Parameter ausschreiben | Bessere Lesbarkeit |
| Cmdlets statt Aliase verwenden | Eindeutiger und professioneller |
| Bei gefährlichen Befehlen -WhatIf nutzen | Verhindert versehentliche Änderungen |
| Pfade mit Leerzeichen in Anführungszeichen setzen | Vermeidet Fehler |
| Get-Help nutzen | Parameter müssen nicht auswendig gelernt werden |
| Befehle erst testen | Besonders bei Löschen, Stoppen oder Ändern |
IHK-Einordnung
Für die IHK ist vor allem wichtig, dass man das Prinzip versteht.
Man muss normalerweise nicht jeden Parameter auswendig kennen.
Wichtig ist:
| Prüfungsrelevanter Punkt | Erklärung |
|---|---|
| Cmdlet erkennen | PowerShell-Befehl verstehen |
| Parameter erkennen | Zusatzangabe zum Befehl erkennen |
| Parameterwert erkennen | Konkreten Wert zuordnen |
| Schalterparameter verstehen | Parameter ohne eigenen Wert |
| Pipeline verstehen | Ausgabe eines Befehls wird weitergegeben |
| Sichere Ausführung verstehen | -WhatIf und -Confirm kennen |
| Hilfe verwenden können | Get-Help und Get-Command kennen |
Prüfungsnahes Beispiel
Aufgabe:
Ein Administrator möchte alle Textdateien im Ordner C:\Temp und dessen Unterordnern anzeigen lassen.
Passender PowerShell-Befehl:
Get-ChildItem -Path "C:\Temp" -Filter "*.txt" -Recurse
Erklärung:
| Teil | Bedeutung |
|---|---|
| Get-ChildItem | Ordnerinhalt anzeigen |
| -Path "C:\Temp" | Startordner festlegen |
| -Filter "*.txt" | Nur Textdateien anzeigen |
| -Recurse | Unterordner einbeziehen |
Prüfungsnahes Beispiel mit Sicherheit
Aufgabe:
Ein Administrator möchte prüfen, welche Dateien durch einen Löschbefehl betroffen wären, ohne sie wirklich zu löschen.
Passender PowerShell-Befehl:
Remove-Item -Path "C:\Temp\*.log" -WhatIf
Erklärung:
| Teil | Bedeutung |
|---|---|
| Remove-Item | Elemente löschen |
| -Path "C:\Temp*.log" | Alle .log-Dateien im Zielpfad |
| -WhatIf | Nur anzeigen, was passieren würde |
Zusammenfassung
Parameter sind ein zentrales Konzept in PowerShell.
Sie steuern, wie ein Cmdlet arbeitet und auf welche Objekte es angewendet wird.
Die wichtigsten Punkte:
| Punkt | Kurz erklärt |
|---|---|
| Parameter steuern Cmdlets | Sie machen Befehle genauer |
| Manche Parameter brauchen Werte | Zum Beispiel -Name "Spooler" |
| Schalterparameter brauchen keinen Wert | Zum Beispiel -Recurse oder -Force |
| Parameter können kombiniert werden | Dadurch entstehen gezielte Befehle |
| -WhatIf und -Confirm erhöhen die Sicherheit | Besonders bei gefährlichen Aktionen |
| Get-Help zeigt verfügbare Parameter | Man muss nicht alles auswendig kennen |
| Die Pipeline übergibt Objekte weiter | Cmdlets können miteinander kombiniert werden |
Kurzer Merksatz
Ein Parameter ist eine Zusatzangabe zu einem PowerShell-Cmdlet, mit der festgelegt wird, worauf und wie der Befehl angewendet wird.
Beispiel:
Get-Service -Name "Spooler"
Get-Service ist das Cmdlet.
-Name ist der Parameter.
"Spooler" ist der Parameterwert.
PowerShell – Eigene Parameter definieren
Neben der Verwendung vorhandener Parameter kann man in PowerShell auch eigene Parameter für Skripte und Funktionen definieren.
Dadurch muss man Werte nicht fest im Skript eintragen, sondern kann sie beim Start des Skripts übergeben.
Warum eigene Parameter sinnvoll sind
Ohne Parameter wären Werte oft fest im Skript eingetragen.
Beispiel ohne Parameter:
$Name = "Felix"
Write-Output "Hallo $Name"
Das Problem:
Der Name ist fest im Skript eingetragen.
Wenn ein anderer Name verwendet werden soll, muss das Skript geändert werden.
Besser ist ein Parameter:
param(
[string]$Name
)
Write-Output "Hallo $Name"
Aufruf:
.\gruss.ps1 -Name "Felix"
Ausgabe:
Hallo Felix
Der param()-Block
Eigene Parameter werden in PowerShell meistens mit einem param()-Block definiert.
Der param()-Block steht in Skripten normalerweise am Anfang der Datei.
Grundform:
param(
[Datentyp]$Parametername
)
Beispiel:
param(
[string]$Name
)
Write-Output "Hallo $Name"
Bedeutung:
| Teil | Erklärung |
|---|---|
| param() | Bereich, in dem Parameter definiert werden |
| [string] | Datentyp des Parameters |
| $Name | Name des Parameters als Variable |
Parameter beim Skriptstart übergeben
Ein Skript mit Parameter kann beim Start Werte annehmen.
Beispielskript:
param(
[string]$Name,
[int]$Alter
)
Write-Output "$Name ist $Alter Jahre alt."
Aufruf:
.\person.ps1 -Name "Felix" -Alter 30
Bedeutung:
| Teil | Erklärung |
|---|---|
| .\person.ps1 | Skript wird gestartet |
| -Name | Parametername |
| "Felix" | Wert für den Parameter Name |
| -Alter | Parametername |
| 30 | Wert für den Parameter Alter |
Datentypen bei Parametern
Man kann festlegen, welchen Datentyp ein Parameter erwartet.
Beispiele:
| Datentyp | Bedeutung | Beispiel |
|---|---|---|
| [string] | Text | "Felix" |
| [int] | Ganze Zahl | 30 |
| [bool] | Wahr/Falsch | $true |
| [string[]] | Mehrere Texte | "PC1","PC2" |
| [switch] | Schalterparameter | -VerboseMode |
Beispiel:
param(
[string]$ComputerName,
[int]$Port
)
Write-Output "Computer: $ComputerName"
Write-Output "Port: $Port"
Aufruf:
.\test.ps1 -ComputerName "Server01" -Port 443
Parameter mit Standardwert
Ein Parameter kann einen Standardwert haben.
Wenn beim Aufruf kein Wert angegeben wird, verwendet PowerShell automatisch den Standardwert.
Beispiel:
param(
[string]$Name = "Benutzer"
)
Write-Output "Hallo $Name"
Aufruf ohne Parameter:
.\gruss.ps1
Ausgabe:
Hallo Benutzer
Aufruf mit Parameter:
.\gruss.ps1 -Name "Felix"
Ausgabe:
Hallo Felix
Pflichtparameter
Ein Parameter kann verpflichtend gemacht werden.
Dafür verwendet man das Attribut:
[Parameter(Mandatory)]
Beispiel:
param(
[Parameter(Mandatory)]
[string]$Name
)
Write-Output "Hallo $Name"
Wenn der Parameter beim Aufruf fehlt, fragt PowerShell nach dem Wert.
Aufruf:
.\gruss.ps1
PowerShell fragt dann nach dem fehlenden Parameter.
Parameter-Attribut
Mit [Parameter()] kann man Eigenschaften eines Parameters festlegen.
Beispiel:
param(
[Parameter(Mandatory)]
[string]$ComputerName
)
Wichtige Eigenschaften:
| Eigenschaft | Bedeutung |
|---|---|
| Mandatory | Parameter ist verpflichtend |
| Position | Parameter kann über seine Position erkannt werden |
| ValueFromPipeline | Wert kann aus der Pipeline kommen |
| ValueFromPipelineByPropertyName | Wert kann über passenden Eigenschaftsnamen aus der Pipeline kommen |
| HelpMessage | Hilfetext für den Parameter |
Positionelle Parameter
Parameter können auch über ihre Position übergeben werden.
Beispiel:
param(
[Parameter(Position=0)]
[string]$Name,
[Parameter(Position=1)]
[int]$Alter
)
Write-Output "$Name ist $Alter Jahre alt."
Aufruf mit Parameternamen:
.\person.ps1 -Name "Felix" -Alter 30
Aufruf über Position:
.\person.ps1 "Felix" 30
PowerShell erkennt:
| Position | Wert | Parameter |
|---|---|---|
| 0 | "Felix" | Name |
| 1 | 30 | Alter |
Für saubere Dokumentation ist die Variante mit Parameternamen meist besser.
Parameter validieren
Parameterwerte können geprüft werden.
Dadurch kann verhindert werden, dass falsche Werte verarbeitet werden.
ValidateSet
Mit ValidateSet kann man erlaubte Werte festlegen.
Beispiel:
param(
[ValidateSet("Start","Stop","Restart")]
[string]$Action
)
Write-Output "Gewählte Aktion: $Action"
Erlaubte Aufrufe:
.\dienst.ps1 -Action Start
.\dienst.ps1 -Action Stop
.\dienst.ps1 -Action Restart
Nicht erlaubt:
.\dienst.ps1 -Action Delete
PowerShell würde den falschen Wert ablehnen.
ValidateNotNullOrEmpty
Mit ValidateNotNullOrEmpty wird verhindert, dass ein leerer Wert übergeben wird.
Beispiel:
param(
[ValidateNotNullOrEmpty()]
[string]$Name
)
Write-Output "Hallo $Name"
Das ist sinnvoll, wenn ein Parameter zwar angegeben wird, aber nicht leer sein darf.
Schalterparameter selbst definieren
Schalterparameter werden mit [switch] definiert.
Ein Schalterparameter braucht keinen eigenen Wert.
Beispiel:
param(
[switch]$Ausfuehrlich
)
if ($Ausfuehrlich) {
Write-Output "Ausführliche Ausgabe aktiviert"
} else {
Write-Output "Normale Ausgabe"
}
Aufruf ohne Schalter:
.\test.ps1
Aufruf mit Schalter:
.\test.ps1 -Ausfuehrlich
Bedeutung:
Der Parameter ist aktiv, sobald er angegeben wird.
Parameter in Funktionen
Parameter können nicht nur in Skripten, sondern auch in Funktionen verwendet werden.
Beispiel:
function Begruessung {
param(
[string]$Name
)
Write-Output "Hallo $Name"
}
Aufruf:
Begruessung -Name "Felix"
Ausgabe:
Hallo Felix
Erweiterte Funktion mit Parametern
Eine etwas sauberere Funktion:
function Test-Verbindung {
param(
[Parameter(Mandatory)]
[string]$ComputerName
)
Test-Connection -ComputerName $ComputerName -Count 2
}
Aufruf:
Test-Verbindung -ComputerName "server01"
Hier nimmt die eigene Funktion den Parameter -ComputerName entgegen und verwendet ihn intern für Test-Connection.
Unbenannte Parameter mit $args
PowerShell kann auch über $args Werte entgegennehmen.
Beispiel:
Write-Output "Erster Wert: $($args[0])"
Write-Output "Zweiter Wert: $($args[1])"
Aufruf:
.\test.ps1 Felix Berlin
Ausgabe:
Erster Wert: Felix
Zweiter Wert: Berlin
Das funktioniert, ist aber weniger sauber als ein richtiger param()-Block.
Besser:
param(
[string]$Name,
[string]$Ort
)
Write-Output "$Name aus $Ort"
Aufruf:
.\test.ps1 -Name "Felix" -Ort "Berlin"
Named Parameters vs. Positional Parameters
Es gibt zwei typische Arten, Parameter zu übergeben.
| Art | Beispiel | Erklärung |
|---|---|---|
| Named Parameter | .\test.ps1 -Name "Felix" | Parametername wird angegeben |
| Positional Parameter | .\test.ps1 "Felix" | PowerShell erkennt den Parameter über die Position |
Named Parameters sind besser lesbar und weniger fehleranfällig.
Mehrere Werte übergeben
Ein Parameter kann mehrere Werte annehmen, wenn er als Array definiert ist.
Beispiel:
param(
[string[]]$ComputerName
)
foreach ($Computer in $ComputerName) {
Write-Output "Prüfe $Computer"
}
Aufruf:
.\check.ps1 -ComputerName "PC1","PC2","PC3"
Ausgabe:
Prüfe PC1
Prüfe PC2
Prüfe PC3
Advanced Function und CmdletBinding
Mit [CmdletBinding()] kann eine Funktion sich stärker wie ein echtes Cmdlet verhalten.
Beispiel:
function Remove-TestDatei {
[CmdletBinding(SupportsShouldProcess)]
param(
[Parameter(Mandatory)]
[string]$Path
)
if ($PSCmdlet.ShouldProcess($Path, "Datei löschen")) {
Remove-Item -Path $Path
}
}
Vorteil:
Die Funktion unterstützt dadurch zum Beispiel -WhatIf.
Aufruf:
Remove-TestDatei -Path "C:\Temp\test.txt" -WhatIf
PowerShell zeigt dann nur an, was passieren würde.
Das ist besonders wichtig bei Funktionen, die etwas verändern oder löschen.
Warum Parameter besser sind als feste Werte
Schlechter Stil:
$ComputerName = "Server01"
Test-Connection -ComputerName $ComputerName
Besser:
param(
[string]$ComputerName
)
Test-Connection -ComputerName $ComputerName
Aufruf:
.\ping.ps1 -ComputerName "Server01"
Vorteile:
| Vorteil | Erklärung |
|---|---|
| Wiederverwendbar | Skript funktioniert mit verschiedenen Werten |
| Flexibler | Werte werden beim Start übergeben |
| Wartbarer | Skript muss nicht ständig geändert werden |
| Sicherer | Werte können validiert werden |
| Professioneller | Entspricht eher echter Administration |
IHK-Einordnung
Für die IHK ist vor allem wichtig, das Prinzip zu verstehen:
Ein Parameter macht Skripte und Funktionen flexibel.
Man schreibt nicht alle Werte fest in den Code, sondern übergibt sie beim Aufruf.
Wichtige Punkte:
| Punkt | Bedeutung |
|---|---|
| param() | Definiert eigene Parameter |
| [string], [int], [switch] | Legt Datentypen fest |
| Mandatory | Macht Parameter verpflichtend |
| Position | Erlaubt positionelle Übergabe |
| ValidateSet | Beschränkt erlaubte Werte |
| ValidateNotNullOrEmpty | Verhindert leere Werte |
| [switch] | Erstellt Schalterparameter |
| $args | Enthält unbenannte Argumente |
| CmdletBinding | Macht Funktionen cmdletähnlicher |
Prüfungsnahes Beispiel
Aufgabe:
Ein Skript soll einen Computernamen als Parameter entgegennehmen und eine Verbindung prüfen.
Lösung:
param(
[Parameter(Mandatory)]
[string]$ComputerName
)
Test-Connection -ComputerName $ComputerName -Count 2
Aufruf:
.\check.ps1 -ComputerName "Server01"
Erklärung:
| Teil | Bedeutung |
|---|---|
| param() | Definiert Eingabeparameter |
| [Parameter(Mandatory)] | Parameter ist verpflichtend |
| [string] | Erwartet Text |
| $ComputerName | Variable für den übergebenen Wert |
| Test-Connection | Prüft Netzwerkverbindung |
| -ComputerName $ComputerName | Nutzt den übergebenen Wert |
Kurzer Merksatz
Mit param() definiert man eigene Parameter für PowerShell-Skripte oder Funktionen. Dadurch werden Skripte flexibel, wiederverwendbar und professioneller.