PowerShell Like Operator & Meer: Verbeter uw scriptgame

Net als veel andere programmeertalen heeft PowerShell verschillende vergelijkingsoperatoren. Echter, in tegenstelling tot andere talen, kunnen deze vergelijkingsoperatoren er een beetje vreemd uitzien. In plaats van == gebruik je eq. In plaats van <> heb je ne. Dit kan verwarrend zijn voor nieuwkomers. Laten we de PowerShell like-operator en andere vergelijkingsoperatoren in dit artikel bekijken.

Testen op gelijkheid met de eq en ceq operatoren

Om te controleren of het ene object gelijk is aan een ander object in PowerShell, gebruik je de eq operator. De eq operator vergelijkt eenvoudige objecten van vele typen, zoals strings, boolean waarden, integers, enzovoort. Wanneer deze gebruikt wordt, retourneert de eq operator een boolean waarde van True of False afhankelijk van het resultaat.

De -eq operator heeft twee waarden nodig om te vergelijken. Laten we zeggen dat je een string toewijst aan een variabele genaamd $string. Je wilt deze variabele vergelijken met de string waarde "PowerShell" om te controleren of ze gelijk zijn.

In het volgende voorbeeld zie je dat we de waarde PowerShell toewijzen aan de variabele $string. Vervolgens vergelijkt het voorbeeld met behulp van de operator eq de waarde van $string met de string powershell. Makkelijk genoeg, toch? Maar wacht, ze zijn niet echt hetzelfde.

PS> $string = "PowerShell"
PS> $string -eq "powershell"
True

Merk op dat = een toekenningsoperator is en GEEN vergelijkingsoperator. Je kunt = niet gebruiken om één waarde met een andere te vergelijken in PowerShell.

Testen van hoofdlettergevoeligheid met de operator ceq

In het bovenstaande voorbeeld, let op hoe eq een boolean-waarde True retourneert, zelfs wanneer de string niet exact hetzelfde is. Dit gedrag komt omdat de operator eq hoofdletteronafhankelijk is. Om te testen op hoofdlettergevoelige gelijkheid, gebruik je de operator ceq. De operator ceq is precies hetzelfde als eq, met uitzondering van hoofdlettergevoeligheid.

Je kunt een voorbeeld zien van het gebruik van ceq in de volgende codefragment. Let nu op het hoofdlettergevoelige verschil dat PowerShell ziet.

PS> $string -ceq "PowerShell"
True 
PS> $string -ceq "powershell"
False

Testen op ongelijkheid met de operators ne en cne

Net zoals eq en ceq testen op gelijkheid, heeft PowerShell een paar operators die het tegenovergestelde doen, genaamd ne en cne. Net als hun tegenhangers voeren deze twee operators dezelfde bewerking uit, maar dan het tegenovergestelde.

PS> $string = "PowerShell"
PS> $string -ne "PowerShell"
False
PS> $string -cne "PowerShell"
False
PS> $string -cne "powershell"
True

Testen op items in een verzameling

Meestal worden de operators eq en ceq gebruikt voor scalars of enkele waarden zoals strings, integers en booleaanse waarden. Maar deze operators kunnen ook exemplaren van specifieke waarden vinden die binnen een verzameling voorkomen, zoals een array.

Let op het volgende voorbeeld waarin we een array met 12 integers maken. Misschien wil je alle exemplaren in die array vinden die gelijk zijn aan het getal 9. Geen probleem, gebruik de eq operator op de array om alle exemplaren van de vergeleken integer terug te krijgen.

PS> $array =@(1,2,3,4,5,6,7,8,9,9,9,9)
PS> $array -eq 9
9
9
9
9
PS> ($array -eq 9).Count
4

Testen of verzamelingen waarden bevatten

Aangezien je zojuist hebt geleerd om de eq operator te gebruiken om exemplaren in arrays te vinden, laten we een stap verder gaan en de “bevatting” operators introduceren. Deze operators zijn contains, notcontains, in en notin. Deze operators retourneren een booleaanse waarde True of False als een verzameling een exemplaar bevat of niet.

Bekijk het volgende voorbeeld. In dit voorbeeld maken we een array met negen integers. Als je een eenvoudig Ja/Nee antwoord wilt op de vraag of die array een bepaalde integer bevat, kun je dat krijgen met behulp van contains of notcontains.

PS> $array = @(2,4,5,6,8,8,9,9,9)
PS> $array -contains 9
True
PS> $array -notcontains 9
False
PS> $array -contains 5

Op dezelfde manier heb je de operators in en notin. Deze operators zijn bijna identiek aan contains en notcontains, met één uitzondering: de te vergelijken waarde staat aan de linkerkant in plaats van aan de rechterkant.

$array = @(2,4,5,6,8,8,9,9,9)
9 -in $array
True
9 -notin $array
False

Testen van “Groter dan” met de gt en ge operators

Wat gebeurt er als je moet testen of een getal (een geheel getal) groter is dan een ander getal of misschien groter dan of gelijk aan een ander getal? Dan gebruik je de gt en ge operatoren. Deze operatoren vergelijken gehele getallen.

Net als de andere operatoren, geven deze operatoren booleanwaarden True of False terug, afhankelijk van of het ene gehele getal groter is dan het andere. Beide operatoren testen of het linker gehele getal groter is dan of groter dan of gelijk aan het rechter gehele getal.

In het onderstaande voorbeeld kun je zien hoe elke operator zich gedraagt.

PS> 7 -gt 5
True
PS> 7 -gt 7
False
PS> 7 -ge 7
True

Vergelijkbaar met de eq operator waarmee je instanties in collecties kunt vinden, kun je hetzelfde doen met de ge en gt operatoren. PowerShell doorzoekt elk item in een collectie en vergelijkt elke waarde met degene die je hebt opgegeven. Je kunt hieronder een goed voorbeeld hiervan zien.

PS> $array =@(1,2,3,4,5,6,7,8,9,9,9,9)
PS> $array -gt 5
6
7
8
9
9
9
9
PS> $array -ge 5
5
6
7
8
9
9
9
9

Het testen van “kleiner dan” met de lt en le operatoren

Vergelijkbaar met de gt en ge operatoren, voeren de lt en le operatoren dezelfde functie uit maar tegenovergesteld. De lt en le operatoren vergelijken twee waarden en testen of het gehele getal aan de linkerkant kleiner is dan of kleiner dan of gelijk is aan het gehele getal aan de rechterkant.

In het onderstaande voorbeeld kun je zien dat dezelfde functionaliteit van het vergelijken van elke waarde in een collectie precies hetzelfde werkt als gt en ge.

PS> $array =@(1,2,3,4,5,6,7,8,9,10)
PS> $array -lt 5
1
2
3
4
PS> $array -le 5 
1
2
3
4
5

Overeenkomsten op basis van wildcards met de PowerShell Like-operator

Tot nu toe heb je geleerd hoe je 1:1 overeenkomsten kunt uitvoeren. Alle tot nu toe gebruikte operators vergeleken één geheel getal met een ander, maar PowerShell heeft nog een trucje achter de hand. Je kunt waarden ook vergelijken op basis van wildcards of asterisken.

Stel dat je slechts een paar tekens van een string kent. Je kunt niet eq gebruiken omdat eq vereist dat je de hele string kent. Door de PowerShell-like operator te gebruiken, hoef je de hele string niet te kennen. Om te testen of een waarde lijkt op een andere, kun je het deel dat je niet kent vervangen door een wildcard.

Net als bij andere operators kan deze functionaliteit ook worden toegepast op verzamelingen.

Hieronder zie je een voorbeeld van de PowerShell-like operator en zijn hoofdlettergevoelige tegenhanger, clike.

PS> $string = "PowerShell"
PS> $string -like "*Shell"
True
PS> $array = @("PowerShell","Microsoft")
PS> $array -like "*Shell"
PowerShell
PS> $array -clike "*Shell"
PowerShell

De operator -notlike retourneert boolean True als er geen overeenkomst is gevonden en False als er wel een overeenkomst is. In het geval van het gebruik ervan tegen een verzameling, retourneert het alle andere waarden die niet overeenkomen met het opgegeven patroon aan de rechterkant van de -notlike operator. Voeg voor hoofdlettergevoeligheid aan het patroon de -cnotlike operator toe.

$string = "PowerShell" 
$string -notlike "*Shell"
False
$array = @("PowerShell","Microsoft")
$array -notlike "*Shell"
Microsoft
$array -cnotlike "*shell"
PowerShell
Microsoft

Vergelijken op basis van reguliere expressies

De PowerShell like operator en zijn familielid zijn handig, maar zodra je complexere overeenkomsten nodig hebt. Op dat moment kun je duiken in de diepe, donkere wereld van reguliere expressies (regex) . Met behulp van de match en notmatch operatoren, kun je extreem complexe string matching uitvoeren met regex.

Vergelijkbaar met de PowerShell like operator vergelijkt match en zijn tegenovergestelde tegenhanger, notmatch, twee strings en geeft een boolean True of False waarde terug. Ook, net als de andere operatoren, kan hetzelfde gedrag worden toegepast voor een collectie zoals het onderstaande voorbeeld laat zien.

PS> $string = "PowerShell"
PS> $string -match "ow"
True 

PS> $array = @("PowerShell","Microsoft")
PS> $array -match "ow"
PowerShell

PS> $string = "PowerShell"
PS> $string -cmatch "po"
False
PS> $string -cmatch "Po"
True

PS> $array = @("PowerShell","Microsoft")
PS> $array -cmatch "Po"
PowerShell

Samenvatting

In dit artikel heb je geleerd over de PowerShell like operator en vele anderen en hoe je elke operator kan gebruiken voor enkele waarden en collecties. Je hebt gezien hoe de output verschilt op basis van de operator en of het een scalaire of collectie is.

Bovendien heb je ook operatoren met hoofdlettergevoeligheid gezien, overeenkomst operatoren hoe te matchen op basis van reguliere expressie of wildcard, en containment operatoren om te testen of het object een specifieke waarde bevat of als een waarde bestaat in een specifiek object.

PowerShell Like

Source:
https://adamtheautomator.com/powershell-like/