amikor az emberek feltárása a szereplők rendelkezésre PowerShell (segítség about_comparison_operators), akkor gyakran fut át két hasonló-látszólagos, de drasztikusan különböző, operátorok – és összezavarodnak őket.
gyakran látom, hogy valaki megpróbálja ezt:
if ($string -contains '*win*') { }
megpróbálják megnézni, hogy a $string tartalmazza-e a” win ” betűket, de sajnos ez nem az, amit tartalmaz. Amit igazán használni akarnak, az A-szerű operátor:
if ($string-szerű ‘ * win*’) { }
tudom, hogy nem olvas olyan szépen, amikor hangosan mondod. Úgy hangzik, Valley lány, azt hiszem. “Ha, mint, ez a változó, mint, tudod, ez a helyettesítő, omigod, mint igazán?”De-szerű a megfelelő operátor erre a feladatra.
A-tartalmazza operátor egy kicsit trükkösebb. Úgy tervezték, hogy megmondja, ha egy objektumgyűjtemény tartalmaz (“tartalmaz”) egy adott objektumot. Most, ha a gyűjtemény objektum egy csomó húrok, ez elég egyszerű.
$coll = "one','two','three','four'if ($coll -contains 'one') { }
nehezebb lesz, ha a gyűjtemény összetett objektumokat tartalmaz. Ez nem fog úgy működni, mint gondolnád:
$ coll = Get-Service
Ha ($coll- “biteket” tartalmaz) { }
A $coll változó nem tartalmazza a “bitek” karakterláncot; amit tartalmaz, egy olyan szolgáltatásobjektum, amelynek neve tulajdonság bit. Nem igazán használhatja-ilyen módon tartalmazza, mert összehasonlítja az egész objektumot. Például:
# Get all processes
$procs = Get-Process
# Get just one process
$proc = Get-Process / Select-first 1
# Check it
$procs-contains $proc
Ez szinte mindig hamis. Ennek oka az, hogy a második parancs futtatásához szükséges idő alatt az első folyamat megváltozott. A memória, a CPU vagy más érték megváltozott. Bár a $procs ugyanazt a tényleges folyamatot tartalmazza, mint a $proc, nem minden egyes tulajdonság pontosan ugyanaz mindkét esetben. Így-tartalmaz nem érzékeli a mérkőzés.
Tudjon meg többet a ” Top Ten PowerShell bosszúság.”
szeretne feltenni egy kérdést erről a cikkről? Válaszolok: http://powershell.com/cs/forums/230.aspx!