PowerShell-bevat-achtige

wanneer mensen de beschikbare operators in PowerShell (help about_comparison_operators) verkennen, zullen ze vaak twee soortgelijke, maar drastisch verschillende operators tegenkomen en door hen in de war raken.

Ik zie vaak iemand dit proberen:

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

ze proberen te zien of $string de letters” win ” bevat, maar helaas is dat niet wat-bevat doet. Wat ze echt willen gebruiken is de-achtige operator:

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

Ik weet dat het niet zo mooi leest als je het hardop zegt. Klinkt nogal Valley Girl, denk ik. “Als, zoals, deze variabele, zoals, je weet wel, dit wildcard, omigod, zoals echt?”Maar-like is de juiste operator voor deze taak.

De-bevat operator is wat lastiger. Het is ontworpen om je te vertellen of een verzameling objecten een bepaald object bevat (‘bevat’). Als je verzameling van objecten een stel snaren is, is dit vrij eenvoudig.

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

Het wordt moeilijker als de verzameling complexe objecten bevat. Dit zal niet werken zoals je zou denken:

$coll = Get-Service
if ($coll-bevat ‘BITS’) {}

de variabele $coll bevat niet de tekenreeks “BITS;” wat het bevat is een service object waarvan de naam eigenschap BITS is. Je kunt niet echt gebruiken-bevat op deze manier, omdat het vergelijkt het hele object. Bijvoorbeeld:

# alle processen ophalen
$procs = Get-proces

# slechts één proces ophalen
$proc = Get-proces | select-first 1

# controleer het
$procs-bevat $proc

Dit zal bijna altijd onwaar zijn. Dat komt omdat, in de tijd die nodig is om het tweede commando uit te voeren, het eerste proces is veranderd. Zijn geheugen, CPU, of een andere waarde is veranderd. Hoewel $procs hetzelfde eigenlijke proces bevat als $proc, is niet elke eigenschap precies hetzelfde in beide gevallen. So-bevat kan de Overeenkomst niet detecteren.

leer meer over de ” top tien PowerShell-ergernissen.”

wilt u een vraag stellen over dit artikel? Ik zal antwoorden op http://powershell.com/cs/forums/230.aspx!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *