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.