HOWTO · PowerShell
Mehrere Werte für ein Parameter in PowerShell
Dieser Artikel wird die Parameterfunktion, verschiedene Arten von Variablen, die wir in einem Parameter definieren können, den Umgang mit mehreren Werten in einem einzelnen Parameter und deren Beispielanwendungen besprechen.
Wir behandeln Argumente mit der PowerShell-Parameterfunktion param. Es ist ein grundlegender Bestandteil jedes Skripts, der es Entwicklern ermöglicht, Eingaben zur Laufzeit bereitzustellen.
Darüber hinaus kann ein Parameter, wenn sich das Verhalten eines Skripts ändern muss, die Möglichkeit bieten, dies zu tun, ohne den zugrunde liegenden Code zu ändern.
Dieser Artikel wird die parameter-Funktion, verschiedene Variablen, die wir definieren können, die Handhabung mehrerer Werte in einem einzelnen Parameter und Musterverwendungen besprechen.
Verständnis der Parameter-Funktion in PowerShell
Administratoren können Parameter für Skripte mit der Parameterfunktion param() erstellen.
Innerhalb dieser Funktion enthält die Parameterfunktion einen oder mehrere Parameter, die durch Variablen definiert sind.
param ($myVariable)
Um jedoch sicherzustellen, dass der Parameter nur den benötigten Eingabetyp akzeptiert, ist es am besten, dem Parameter einen Datentyp zuzuweisen, indem der Datentyp in eckige Klammern [] vor der Variablen gesetzt wird.
param ([String]$myVariable)
–>
Es ist erwähnenswert, dass Sie auch andere Datentypen wie Ganzzahlen, Float und DateTime verwenden können. Wir können ihm auch einen Datentyp Boolean zuweisen, den wir weiter unten besprechen werden.
Verwenden der Benannten Parameter in PowerShell
Die Verwendung einer Parameterfunktion in einem Skript erfolgt über benannte Parameter.
Beim Übergeben von Werten an ein Skript oder eine Funktion über benannte Parameter können wir den Namen der Variablen als den vollständigen Namen des Parameters verwenden.
sample.ps1:
param ([String]$name)
Write-Output $name
Wir können dann die benannten Parameter beim Ausführen einer .ps1-Datei verwenden.
powershell.exe .\sample.ps1 -name "John"
Verwendung von Standardwerten für einen Parameter in PowerShell
Wir können einem Parameter einen Standardwert zuweisen, indem wir dem Parameter innerhalb des Skripts einen Wert geben.
Zusätzlich wird das Skript, wenn es ohne Übergabe von Werten über die Befehlszeile ausgeführt wird, den im Skript definierten Standardwert übernehmen.
param ([String]$name = "John")
Verwendung von Switch-Parametern in PowerShell
Wir können einen anderen Parametertyp für unsere Skripts verwenden: den switch-Parameter, der durch den [switch]-Datentyp definiert ist.
Dieser Parameter wird hauptsächlich für binäre oder boolesche Werte verwendet, die wir zuvor diskutiert haben, und zeigt den Wert von true oder false an.
param ([switch]$isEnabled)
–>
Verwenden der Obligatorischen Parameter in PowerShell
Es ist in einigen unserer Anwendungsfälle üblich, einen oder mehrere Parameter zu haben, die verwendet werden müssen, wenn ein Skript ausgeführt wird.
Wir können einen obligatorischen Parameter definieren, indem wir ein Mandatory-Attribut innerhalb des Parameterblocks [Parameter()] hinzufügen.
param (
[Parameter(Mandatory)]
[String] $servername
)
Die Skripting-Umgebung erlaubt es nicht, das Skript auszuführen, es sei denn, ein Wert wurde in der Befehlszeile bereitgestellt.
Verwendung einer unbekannten Anzahl von Argumenten in PowerShell
Generell finde ich die Verwendung von benannten Parametern dem bloßen Lesen der Argumente aus der Befehlszeile weit überlegen. Das Lesen der Argumente ist einfacher, wenn Sie eine unbekannte Anzahl von Argumenten behandeln müssen.
Nehmen wir als Beispiel Laufwerksbuchstaben. Vielleicht benötigen wir ein Skript, um ein oder mehrere Laufwerke auf der Maschine zu überprüfen.
Dann können wir einen benannten Parameter verwenden und ihn als String-Datentyp deklarieren.
checkdrives.ps1:
param([String]$myDrive)
foreach ($drive in $myDrive) {
Write-Output "Processing drive $drive"
}
Wenn jedoch mehrere Laufwerksbuchstaben als Argument übergeben werden, behandelt PowerShell dies als ein Objekt.
powershell .\checkdrives.ps1 -myDrive C, D, E
Ausgabe:
Processing drive C D E
PowerShell wird die Kommas durch Leerzeichen ersetzen und sie als eine Variable behandeln. Leider würde dies nicht funktionieren, da wir die Laufwerke in unserem Anwendungsfall einzeln verarbeiten müssen.
Damit unser Interpreter mehrere Parameter unter einem Argument erfassen kann, müssen wir den Datentyp als Array mit eckigen Klammern [] ändern. Wenn das Skript dann ausgeführt wird, wird PowerShell die aufgelisteten Argumente einzeln verarbeiten.
checkdrives.ps1:
param([String[]]$myDrive)
foreach ($drive in $myDrive) {
Write-Output "Processing drive $drive"
}
Beispielcode:
powershell .\checkdrives.ps1 -myDrive C, D, E
Denken Sie daran, die Argumente mit einem Komma zu trennen.
Ausgabe:
Processing drive C
Processing drive D
Processing drive E
Verwendung der Pipeline-Parameter in PowerShell
Die meisten PowerShell-Cmdlets erlauben es Ihnen, das Pipe-Symbol | zum Übergeben von Daten zu verwenden. Wir können dies zu unserem Vorteil nutzen, wenn es um Parameter geht.
Zum Beispiel können wir den letzten Wert, der in der Pipeline gespeichert ist, abrufen und ihn an eine andere PowerShell-Datei übergeben, indem wir das Attribut ValueFromPipeline des Parameterblocks verwenden.
pipeline.ps1:
param([parameter(ValueFromPipeline)]$pipedVar)
Write-Output $pipedVar
Beispielcode:
"This string is from the pipeline." | .\pipeline.ps1
Ausgabe:
This string is from the pipeline.
Mit dieser Technik eröffnen sich viele Möglichkeiten zum Ausführen verketteter PowerShell-Dateien.