Tester le type de données d'une variable à l'aide de PowerShell
Une technique dans PowerShell que nous utilisons habituellement consiste à prendre les entrées de l’utilisateur et à les stocker dans une variable. Cependant, il y aura des situations où une entrée utilisateur prise par l’utilisateur sera différente de notre type de données attendu.
Un exemple serait un utilisateur qui a entré son nom, un type de données String
, au lieu de son âge qui est un type de données Int
ou entier. Dans cet article, nous discuterons de plusieurs manières de gérer les incompatibilités de types de données variables et de les corriger de manière adéquate à l’aide de PowerShell.
Tester une variable à l’aide de PowerShell
Nous allons vous montrer trois exemples de gestion des incompatibilités de types de données variables. Commençons par utiliser des paramètres.
Tester une variable à l’aide de paramètres
Une façon de demander l’entrée de l’utilisateur consiste à préconfigurer les paramètres obligatoires lors de l’exécution du script. Lors de la prédétermination des paramètres, nous pouvons ajouter un type de données pour prendre en charge le paramètre.
De cette façon, le script peut dire si l’utilisateur transmet des variables valides avant le début du script. Regardons l’exemple.
Disons que nous avons besoin de l’âge de l’utilisateur exécutant le script. Nous pouvons exécuter le script suivant ci-dessous pour forcer le script à n’accepter que des valeurs entières.
Exemple de code (param.ps1) :
param(
[Parameter(Mandatory)]
[Int]$age
)
Write-Output $age
Supposons que l’utilisateur l’ait exécuté avec .\param.ps1 -age 2
, le script doit le renvoyer avec la sortie du nombre.
Saisir:
Supply values for the following parameters:
age: 2
Production:
2
Cependant, si l’utilisateur essaie de passer une valeur différente avec un type de données autre qu’un entier, par exemple .\param.ps1 -age "hello"
, le script génère une erreur.
Saisir:
Supply values for the following parameters:
age: hello
Production:
"System.Int32". Error: "Input string was not in a correct format."
Peut-être traitons-nous une entrée utilisateur pendant l’exécution du script. Les méthodes suivantes vérifieront le type de données de la variable pendant que l’exécution du script est en cours.
Tester une variable avec des opérateurs
Une autre méthode de vérification du type de données d’une variable consiste à utiliser des opérateurs conditionnels. Les opérateurs conditionnels sont des fonctions qui associent deux valeurs ou plus et produisent une variable booléenne.
Nous utiliserons les opérateurs conditionnels -is
pour cet article. Dans cette situation, nous pouvons utiliser l’opérateur -is
en faisant correspondre notre variable directement au type de données.
Exemple de code :
$age -is [Int]
Production:
True
Par exemple, avec notre extrait de code ci-dessous, le script affichera la valeur True
si la variable a une valeur entière. Sinon, False
. Étant donné que ces sorties exportent une valeur booléenne, nous pouvons utiliser des instructions conditionnelles pour effectuer des actions spécifiques, comme, peut-être, convertir le type de données d’une variable avec l’opérateur -as
.
Exemple de code :
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."
}
}
Production:
Age is not an integer... Converting
Converted! Age 2 is now an integer
Tester une variable avec des fonctions
Notre dernier exemple est similaire au précédent car nous allons utiliser des opérateurs pour créer notre fonction personnalisée. Nous pouvons utiliser ces opérateurs pour créer une fonction qui vérifiera le type de données de la variable et renverra une valeur booléenne.
Ce qui est génial avec la fonction ci-dessous, c’est que par rapport à notre exemple précédent, cette fonction vérifiera également les valeurs qui sont également négatives, nous fournissant des résultats plus précis.
Exemple de code :
function isNumeric($_){
return $_ -is [int] -or $_ -is [int16] -or $_ -is [int32] -or $_ -is [int64]
}
isNumeric(-1)
Production:
True
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn