HOWTO · PowerShell
Comment comparer le contenu de deux objets chaîne en PowerShell
Cet article explore plusieurs approches pour comparer le contenu de deux objets chaîne dans PowerShell, des vérifications d'égalité et d'inégalité de base utilisant des opérateurs comme -eq et -ne à des techniques plus avancées impliquant la méthode Equals().
Sur cette page
PowerShell propose deux types de vérification des chaînes : utilisez -eq ou -ne pour comparer des valeurs, et -like pour vérifier si une valeur correspond à un modèle avec caractères génériques. Par défaut, les opérateurs de comparaison ignorent la casse ; ajoutez c (-ceq ou -cne) lorsque la casse doit être respectée. La méthode Equals() d’une chaîne permet également de comparer des valeurs en tenant compte de la casse.
Choisir une méthode de comparaison de chaînes dans PowerShell
Choisissez l’opérateur en fonction de la question à laquelle vous souhaitez répondre :
- Utilisez
-eqpour vérifier si deux valeurs sont égales, ou-nepour vérifier si elles diffèrent. Par défaut, les deux ignorent la casse. - Utilisez
-ceqet-cnepour vérifier l’égalité ou l’inégalité en distinguant les majuscules des minuscules. - Utilisez
-likelorsque la valeur de droite contient une syntaxe de caractères génériques, comme*, qui représente une séquence quelconque de caractères. Cet opérateur vérifie un modèle ; il ne compare pas les deux chaînes comme des valeurs littérales. - Utilisez
Equals()lorsqu’un appel de méthode d’instance est plus pratique et que vous souhaitez comparer des valeurs en tenant compte de la casse.
Ces opérateurs renvoient un résultat booléen pour deux chaînes scalaires. Placez le modèle à droite de -like afin que l’intention soit claire.
Comparer des chaînes pour vérifier l’égalité ou l’inégalité avec -eq et -ne
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
$first = "PowerShell"
$second = "PowerShell"
$isEqual = $first -eq $second
$isDifferent = $first -ne $second
Write-Host "Equal: $isEqual"
Write-Host "Unequal: $isDifferent"
Pour cet exemple, l’exécution fournie a affiché Equal: True et Unequal: False. Ces libellés restent en anglais dans l’exemple. Avec les deux valeurs identiques présentées, -eq vérifie l’égalité et -ne son contraire. Dans les comparaisons de chaînes PowerShell ordinaires, ces opérateurs ne tiennent pas compte de la casse : par exemple, "PowerShell" -eq "powershell" renvoie vrai. Si ce comportement par défaut ne convient pas, utilisez les opérateurs sensibles à la casse présentés ci-dessous.
Rendre les vérifications d’égalité et d’inégalité sensibles à la casse avec -ceq et -cne
Le préfixe c rend ces comparaisons sensibles à la casse. Par exemple, "PowerShell" -ceq "powershell" renvoie faux, car les majuscules et les minuscules diffèrent, tandis que "PowerShell" -cne "powershell" renvoie vrai. Utilisez -ceq pour exiger les mêmes caractères et la même casse ; utilisez -cne lorsqu’une différence de casse doit compter comme une différence.
Les formes sensibles à la casse sont utiles pour les identifiants ou les jetons dont la casse est significative. Choisissez une règle de comparaison et appliquez-la de manière cohérente lors de la validation des valeurs ; sinon, une vérification pourrait accepter des variantes qu’une autre partie du script considère comme différentes.
Faire correspondre des modèles avec caractères génériques à l’aide de -like
-like vérifie si une chaîne cible correspond à un modèle avec caractères génériques. Le caractère générique * correspond à une séquence quelconque de caractères, y compris une séquence vide, tandis que ? correspond à un seul caractère. Par exemple, "report-2026.csv" -like "report-*.csv" correspond au modèle, tandis que "report-2026.txt" -like "report-*.csv" n’y correspond pas. Il s’agit de vérifications de modèle, et non de tests d’égalité littérale.
Comme -eq, l’opérateur -like ignore la casse par défaut. Utilisez -clike si la correspondance du modèle doit respecter la casse. Si la valeur doit être identique à une valeur littérale, utilisez plutôt -eq ou -ceq ; les caractères génériques d’un modèle -like ont une signification particulière.
Comparer des valeurs de chaîne avec Equals()
Appelez Equals() sur la première chaîne et transmettez la seconde comme argument : $first.Equals($second). Pour les chaînes, cette méthode compare les valeurs en tenant compte de la casse ; ainsi, "PowerShell".Equals("powershell") renvoie faux. Elle n’interprète pas les caractères génériques : "report-2026.csv".Equals("report-*.csv") renvoie faux, car l’astérisque est traité comme un caractère littéral dans l’argument.
Pour une simple vérification booléenne, Equals() et -ceq expriment tous deux une égalité sensible à la casse. Préférez les opérateurs de comparaison lorsqu’ils rendent une condition plus lisible, et utilisez la méthode si un appel de méthode s’intègre mieux au code environnant. Utilisez -like uniquement lorsque vous devez faire correspondre un modèle.