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] ] [-Filter ] [-Recurse] Bedeutung: Schreibweise Bedeutung [-Path] Parameter ist optional 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.