PowerShell -obsahuje -jako

Když lidé zkoumají operátoři k dispozici v PowerShell (pomoc about_comparison_operators), budou často narazit na dva podobné-zdánlivě, ale drasticky jiná, operátorů – a zmást je.

budu často vidět někoho, zkuste toto:

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

snaží se zjistit, jestli $string obsahuje písmena „vyhrát“, ale bohužel to není to, co obsahuje. To, co opravdu chtějí použít, je-jako operátor:

Pokud ($string-like ‚ * win*‘) { }

vím, že to nečte tak pěkně, když to řeknete nahlas. Zní to trochu Údolní dívka, předpokládám. „Pokud je tato proměnná jako, víte, zástupný znak, omigod, jako opravdu?“Ale-jako je správný operátor pro tento úkol.

operátor-contains je o něco složitější. Je navržen tak, aby vám říct, zda sbírka objektů obsahuje („obsahuje“) určitý objekt. Nyní, pokud je vaše sbírka objektů banda řetězců, je to docela jednoduché.

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

je těžší, když kolekce obsahuje složité objekty. To nebude fungovat, jak byste si mohli myslet:

$sb = Get-Service
if ($sb -obsahuje ‚KOUSKY‘) { }

proměnná $sb neobsahuje řetězec „BITY;“ to, co obsahuje, je objekt služeb, jejichž Jméno je majetek BITŮ. Nemůžete opravdu použít-obsahuje tímto způsobem, protože porovnává celý objekt. Příklad:

# Get všechny procesy
$procs = Get-Process

# Získat jen jeden proces,
$proc = Get-Process | Select-první 1

# Zkontrolovat
$procs -obsahuje $proc

Tento bude téměř vždy Falešné. Je to proto, že v době potřebné ke spuštění druhého příkazu se první proces změnil. Jeho paměť, CPU nebo nějaká jiná hodnota se změnila. Ačkoli $procs obsahuje stejný skutečný proces jako $proc, ne každá vlastnost je v obou případech úplně stejná. Takže-obsahuje nemůže detekovat shodu.

Další informace o “ Top Ten PowerShell Annoyances.“

Chcete se zeptat na tento článek? Odpovím na http://powershell.com/cs/forums/230.aspx!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *