PowerShell-contains-like

Quando le persone stanno esplorando gli operatori disponibili in PowerShell (help about_comparison_operators), spesso si imbattono in due operatori simili, ma drasticamente diversi, e si confondono da loro.

Vedrò spesso qualcuno provare questo:

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

Stanno cercando di vedere se string string contiene le lettere “win”, ma sfortunatamente non è quello che-contains fa. Quello che vogliono davvero usare è l’operatore-like:

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

So che non legge bene quando lo dici ad alta voce. Sembra una ragazza della Valle, suppongo. “Se, tipo, questa variabile, tipo, è come, sai, questo jolly, omigod, davvero?”Ma-like è l’operatore corretto per questo compito.

L’operatore-contains è un po ‘ più complicato. È progettato per dirti se una raccolta di oggetti include (‘contiene’) un particolare oggetto. Ora, se la tua collezione di oggetti è un mucchio di stringhe, questo è piuttosto semplice.

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

Diventa più difficile quando la raccolta contiene oggetti complessi. Questo non funzionerà come si potrebbe pensare:

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

La variabile col coll non contiene la stringa “BITS;” ciò che contiene è un oggetto service la cui proprietà Name è BITS. Non puoi davvero usare-contiene in questo modo, perché confronta l’intero oggetto. Biru:

# Ottieni tutti i processi
proc procs = Get-Process

# Ottieni un solo processo
pro proc = Get-Process/Select-first 1

# Controllalo
proc procs-contains pro proc

Questo sarà quasi sempre Falso. Questo perché, nel tempo necessario per eseguire il secondo comando, il primo processo è cambiato. La sua memoria, CPU o qualche altro valore è cambiato. Sebbene proc procs contenga lo stesso processo effettivo di pro proc, non tutte le singole proprietà sono esattamente le stesse in entrambe le istanze. So-contains non può rilevare la corrispondenza.

Scopri di più sui ” Primi dieci fastidi PowerShell.”

Vuoi fare una domanda su questo articolo? Risponderò a http://powershell.com/cs/forums/230.aspx!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *