PowerShell -contains -like

Wenn Leute die in PowerShell verfügbaren Operatoren untersuchen (help about_comparison_operators ), stoßen sie häufig auf zwei ähnlich aussehende, aber drastisch unterschiedliche Operatoren – und werden von ihnen verwirrt.

Ich werde oft sehen, dass jemand Folgendes versucht:

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

Sie versuchen zu sehen, ob $string die Buchstaben „win“ enthält, aber leider ist das nicht das, was -contains tut. Was sie wirklich verwenden möchten, ist der Operator -like:

if ($string -like ‚*win*‘) { }

Ich weiß, dass es sich nicht so gut liest, wenn man es laut sagt. Klingt ein bisschen Tal Mädchen, nehme ich an. „Wenn, wie, diese Variable, wie, ist wie, wissen Sie, diese Wildcard, omigod, wie wirklich?“ But -like ist der richtige Operator für diese Aufgabe.

Der Operator -contains ist etwas kniffliger. Es wurde entwickelt, um Ihnen mitzuteilen, ob eine Sammlung von Objekten ein bestimmtes Objekt enthält (‚enthält‘). Wenn Ihre Objektsammlung aus einer Reihe von Zeichenfolgen besteht, ist dies ziemlich einfach.

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

Es wird schwieriger, wenn die Sammlung komplexe Objekte enthält. Dies wird nicht so funktionieren, wie Sie vielleicht denken:

$coll = Get-Service
if ($coll -contains ‚BITS‘) { }

Die Variable $coll enthält nicht die Zeichenfolge „BITS“. Sie können -contains auf diese Weise nicht wirklich verwenden, da es das gesamte Objekt vergleicht. Beispielsweise:

# Alle Prozesse abrufen
$procs = Get-Process

# Nur einen Prozess abrufen
$proc = Get-Process / Select -first 1

# Überprüfen Sie es
$procs -contains $proc

Dies wird fast immer falsch sein. Das liegt daran, dass sich in der Zeit, die zum Ausführen des zweiten Befehls benötigt wird, der erste Prozess geändert hat. Der Speicher, die CPU oder ein anderer Wert hat sich geändert. Obwohl $procs denselben tatsächlichen Prozess wie $proc enthält, ist nicht jede einzelne Eigenschaft in beiden Fällen genau gleich. Also – ich kann die Übereinstimmung nicht erkennen.

Erfahren Sie mehr über die „Top Ten PowerShell Annoyances.“

Möchten Sie eine Frage zu diesem Artikel stellen? Ich antworte bei http://powershell.com/cs/forums/230.aspx!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.