PowerShell-conține-cum ar fi

când oamenii explorează operatorii disponibili în PowerShell (ajutor about_comparison_operators), vor rula adesea peste doi operatori asemănători, dar drastic diferiți-și se vor confunda cu ei.

voi vedea de multe ori pe cineva încerca acest lucru:

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

ei încearcă să vadă dacă $string conține literele „win”, dar, din păcate, asta nu e ceea ce-conține nu. Ceea ce doresc cu adevărat să folosească este operatorul-like:

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

știu că nu se citește la fel de bine când o spui cu voce tare. Sună ca o fată din Vale, presupun. „Dacă, cum ar fi, această variabilă, cum ar fi, este ca, știi, acest wildcard, omigod, cum ar fi într-adevăr?”Dar-ca este operatorul corect pentru această sarcină.

operatorul-conține este un pic mai complicat. Este conceput pentru a vă spune dacă o colecție de obiecte include (‘conține’) un anumit obiect. Acum, dacă colecția dvs. de obiecte este o grămadă de șiruri, acest lucru este destul de simplu.

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

devine mai greu atunci când colecția conține obiecte complexe. Acest lucru nu va funcționa așa cum ați putea crede:

$coll = Get-Service
dacă ($coll-conține „biți”) {}

variabila $coll nu conține șirul „biți;” ceea ce conține este un obiect de serviciu a cărui proprietate de nume este biți. Nu puteți folosi cu adevărat-conține în acest mod, deoarece compară întregul obiect. De exemplu:

# obține toate procesele
$procs = Get-Process

# obține doar un singur proces
$proc = Get-Process/Select-first 1

# verifică
$procs-conține $proc

Acest lucru va fi aproape întotdeauna fals. Asta pentru că, în timpul necesar pentru a rula a doua comandă, primul proces s-a schimbat. Memoria, CPU-ul sau o altă valoare s-au schimbat. Deși $procs conține același proces real ca $proc, nu fiecare proprietate este exact aceeași în ambele cazuri. So-contains nu poate detecta meciul.

Aflați mai multe despre „Top Ten PowerShell Annoyances.”

vrei să pui o întrebare despre acest articol? Voi răspunde la http://powershell.com/cs/forums/230.aspx!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *