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!