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!