PowerShell et le left hand side

3 min de lecture · Mis à jour le 8 novembre 2024

Ce guide vous a servi ? Vous pouvez me soutenir en vous abonnant à la chaîne, en partageant, en désactivant votre bloqueur de pub ou en faisant un don. Merci !

Un nouvel article, pour parler d’une notion importante dans PowerShell, la notion de Left Hand Side (LHS)
Lors de l’utilisation d’opérateurs dans PowerShell, le type de l’objet placé à gauche de l’opérateur (LHS) définit le type de l’objet à droite (RHS : Right Hand Side)
On ne peut comparer, additionner, multiplier… que des éléments du même type
Si le type est différent entre LHS et RHS alors PowerShell essaie de convertir l’objet RHS dans le même type que l’objet LHS, s’il n’y arrive pas, il envoie une exception

# Exemple
$jackpot = 9
$nombre = Read-Host "entrez un nombre"
# Indiquez le nombre 10
if ( $nombre -le $jackpot )
{ "$nombre est plus petit que $jackpot" }
else
{ "$nombre plus grand que $jackpot" }

On s’attend à avoir en résultat 9 est plus petit que 10 mais le résultat est 9 est égal ou plus grand que 10
Si on vérifie le type des variables.

$jackpot.GetType()
# $jackpot est un entier
$nombre.GetType()
#$nombre est une chaine

Dans l’exemple précédent, PowerShell convertit donc 10 en chaîne et compare donc le 9 au 1 et 9 est bien plus grand que 1

# Note : -lt correspond à strictement inférieur
9 -lt 10
PS > True
9 -lt '10'
PS > True
# 10 est converti en entier
'9' -lt 10
PS > False
# 10 est converti en chaine
9 -lt 'foo'
PS > Exception, Powershell ne peut pas convertir foo en entier

Un autre exemple avec l’opérateur de multiplication, un entier et une chaîne

# On peut multiplier des caractères avec un nombre
'#' * 10
PS > ##########
# Mais On ne peut pas multiplier un nombre avec des caractères
10 * '#'
PS > Exception, Powershell ne peut pas convertir # en entier

Un dernier exemple avec l’opérateur de multiplication, un array et une chaîne où le résultat va être différent en fonction de l’élément en LHS

$Array = 'foo','bar'
'Hello ' + $Array
PS > Hello foo bar
# Powershell a réussi à convertir mon array en chaine
$Array + 'Hello '
PS > foo
PS > bar
PS > Hello
# Powershell à ajouter ma chaine à mon array

C’est aussi pourquoi les comparaisons avec $null doivent être placées à gauche
Pour en savoir plus sur l’utilisation de $null, vous pouvez lire l’article de Kevin Marquette (https://powershellexplained.com) publié sur le site de Microsoft
https://learn.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-null#checking-for-null

Liens en relation

Suivez-moi sur

Soutenez-moi

Buy Me a Coffee at ko-fi.com

La boutique · Deco-3D

Du relief dans vos affiches

Affiches imprimées couche par couche à Nantes : les couleurs se superposent et l'image prend du volume.

Voir la boutique Livraison offerte en point relais dès 60 € (France)