PowerShell-contains-like

Lorsque les gens explorent les opérateurs disponibles dans PowerShell (aide about_comparison_operators), ils rencontreront souvent deux opérateurs similaires, mais radicalement différents, et seront confus par eux.

Je verrai souvent quelqu’un essayer ceci:

if ($string -contains '*win*') { }

Ils essaient de voir sistringstring contient les lettres « win », mais malheureusement ce n’est pas ce que fait -contains. Ce qu’ils veulent vraiment utiliser, c’est l’opérateur-like:

if(likestring-like ‘*win *’) {}

Je sais qu’il ne se lit pas aussi bien quand vous le dites à haute voix. On dirait une Fille de la Vallée, je suppose. « Si, comme, cette variable, comme, est comme, vous savez, ce caractère générique, omigod, comme vraiment? »Mais-like est l’opérateur correct pour cette tâche.

L’opérateur -contains est un peu plus délicat. Il est conçu pour vous indiquer si une collection d’objets inclut (‘contient’) un objet particulier. Maintenant, si votre collection d’objets est un tas de chaînes, c’est assez simple.

$coll = "one','two','three','four'if ($coll -contains 'one') { }

Cela devient plus difficile lorsque la collection contient des objets complexes. Cela ne fonctionnera pas comme vous pourriez le penser:

colcoll= Get-Service
if(colcoll-contains ‘BITS’) {}

La variablecolcoll ne contient pas la chaîne « BITS; » ce qu’elle contient est un objet de service dont la propriété Name est des BITS. Vous ne pouvez pas vraiment utiliser -contains de cette manière, car il compare l’objet entier. Exemple:

# Obtenez tous les processus
procprocs= Get-Process

# Obtenez un seul processus
proproc= Get-Process/Select-first 1

# Vérifiez-le
procprocs-containsproproc

Ce sera presque toujours faux. En effet, dans le temps nécessaire pour exécuter la deuxième commande, le premier processus a changé. Sa mémoire, son processeur ou une autre valeur a changé. Bien queprocprocs contienne le même processus réel que $proc, toutes les propriétés ne sont pas exactement les mêmes dans les deux cas. So-contains ne peut pas détecter la correspondance.

En savoir plus sur les « dix principaux désagréments PowerShell. »

Vous souhaitez poser une question sur cet article ? Je répondrai à http://powershell.com/cs/forums/230.aspx!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *