Grundlagen

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:


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

👉 Merksatz:
Doppelte Anführungszeichen = Wert wird eingesetzt
Einfache Anführungszeichen = bleibt nur Text


Datentypen

👉 Wichtig:

👉 Merksatz:
Typ kommt automatisch – kann aber festgelegt werden


👉 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

👉 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

👉 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)

👉 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.