Testen den Datentyp einer Variablen mit PowerShell
Eine Technik in PowerShell, die wir normalerweise verwenden, besteht darin, Benutzereingaben zu übernehmen und sie in einer Variablen zu speichern. Es wird jedoch Situationen geben, in denen eine Benutzereingabe, die vom Benutzer genommen wird, von unserem erwarteten Datentyp abweicht.
Ein Beispiel wäre ein Benutzer, der seinen Namen, einen String
-Datentyp, anstelle seines Alters, das ein Int
- oder Integer-Datentyp ist, eingegeben hat. In diesem Artikel werden wir verschiedene Möglichkeiten erörtern, wie wir mit Diskrepanzen bei variablen Datentypen umgehen können und wie wir sie mit PowerShell angemessen korrigieren können.
Testen eine Variable mit PowerShell
Wir zeigen Ihnen drei Beispiele für den Umgang mit Diskrepanzen bei variablen Datentypen. Beginnen wir mit der Verwendung von Parametern.
Testen eine Variable mit Parametern
Eine Möglichkeit, Benutzereingaben anzufordern, besteht darin, obligatorische Parameter während der Skriptausführung vorzukonfigurieren. Beim Vorbestimmen von Parametern können wir einen Datentyp hinzufügen, um den Parameter zu unterstützen.
Auf diese Weise kann das Skript erkennen, ob der Benutzer gültige Variablen übergibt, bevor das Skript beginnt. Schauen wir uns das Beispiel an.
Nehmen wir an, wir brauchen das Alter des Benutzers, der das Skript ausführt. Wir können das folgende Skript unten ausführen, um das Skript zu zwingen, nur ganzzahlige Werte zu akzeptieren.
Beispielcode (param.ps1):
param(
[Parameter(Mandatory)]
[Int]$age
)
Write-Output $age
Angenommen, der Benutzer hat es mit .\param.ps1 -age 2
ausgeführt, sollte das Skript es mit der Ausgabe der Zahl zurückgeben.
Eingang:
Supply values for the following parameters:
age: 2
Ausgabe:
2
Wenn der Benutzer jedoch versucht, einen anderen Wert mit einem anderen Datentyp als einer Ganzzahl zu übergeben, z. B. .\param.ps1 -age "hello"
, gibt das Skript einen Fehler aus.
Eingang:
Supply values for the following parameters:
age: hello
Ausgabe:
"System.Int32". Error: "Input string was not in a correct format."
Möglicherweise verarbeiten wir während der Skriptausführung eine Benutzereingabe. Die folgenden Methoden prüfen den Datentyp der Variablen während der Ausführung des Skripts.
Testen eine Variable mit Operatoren
Eine weitere Methode zur Überprüfung des Datentyps einer Variablen ist die Verwendung von Bedingungsoperatoren. Bedingte Operatoren sind Funktionen, die zwei oder mehr Werte zusammenbringen, die eine boolesche Variable erzeugen.
Wir verwenden für diesen Artikel die Bedingungsoperatoren -is
. In dieser Situation können wir den Operator -is
verwenden, indem wir unsere Variable direkt mit dem Datentyp abgleichen.
Beispielcode:
$age -is [Int]
Ausgabe:
True
Mit unserem Code-Snippet unten gibt das Skript zum Beispiel den Wert True
aus, wenn die Variable einen ganzzahligen Wert hat. Sonst False
. Da diese Ausgaben einen booleschen Wert exportieren, können wir bedingte Anweisungen verwenden, um bestimmte Aktionen auszuführen, wie beispielsweise das Konvertieren des Datentyps einer Variablen mit dem Operator -as
.
Beispielcode:
if($age -is [Int]){
Write-Output "Age $age is an integer"
}else{
Write-Output "Age is not an integer... Converting"
try{
$age = $age -as [Int]
Write-Output "Converted! Age $age is now an integer"
}catch{
Write-Output "Input is a string, could not be converted."
}
}
Ausgabe:
Age is not an integer... Converting
Converted! Age 2 is now an integer
Testen eine Variable mit Funktionen
Unser letztes Beispiel ähnelt unserem vorherigen, da wir Operatoren verwenden werden, um unsere benutzerdefinierte Funktion zu erstellen. Wir können diese Operatoren verwenden, um eine Funktion zu erstellen, die den Datentyp der Variablen prüft und einen booleschen Wert zurückgibt.
Das Tolle an der folgenden Funktion ist, dass diese Funktion im Vergleich zu unserem vorherigen Beispiel auch nach negativen Werten sucht, wodurch wir genauere Ergebnisse erhalten.
Beispielcode:
function isNumeric($_){
return $_ -is [int] -or $_ -is [int16] -or $_ -is [int32] -or $_ -is [int64]
}
isNumeric(-1)
Ausgabe:
True
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn