• 01/20/2021
  • 12 minuten te lezen
    • S
    • s
    • een
    • s
    • q
    • +1

een Korte beschrijving

De vergelijkings-operatoren in PowerShell kunt vergelijken twee waarden of filterelements van een collectie tegen een input waarde.,

lange beschrijving

Vergelijkingsoperators laten u waarden vergelijken of waarden vinden die overeenkomen met gespecificeerde patronen.,nt

bevat collectie bevat een waarde -notcontains collectie bevat een waarde in waarde is in een collectie -notin waarde is niet in een collectie Type is beide objecten van hetzelfde type niet de objecten zijn niet van hetzelfde type

Gemeenschappelijke kenmerken

standaard worden alle vergelijkingsoperators zijn niet hoofdlettergevoelig., Om een vergelijkingsoperator hoofdlettergevoelig te maken, voeg een c toe na de -. Bijvoorbeeld, -ceq is de hoofdlettergevoelige versie van -eq. Om de case-ongevoeligheid expliciet te maken,voeg een i voor -toe. Bijvoorbeeld, -ieq is De expliciet hoofdlettergevoelige versie van -eq.

wanneer de invoer van een operator een scalaire waarde is, geeft de operator abooleaanse waarde terug., Wanneer de invoer een verzameling is, geeft de operator de elementen van de verzameling terug die overeenkomen met de rechterwaarde van de expressie.Als er geen overeenkomsten in de collectie, vergelijking operators retourneren een emptyarray.,v>

Object0

Er zijn een paar uitzonderingen:

  • De insluiting en type operators altijd een Boolean-waarde retourneren
  • De -replace operator geeft de vervanging resultaat
  • De -match en -notmatch operators ook het vullen van de $Matches automaticvariable

Gelijkheid operatoren

-eq en -ne

Wanneer de linker kant is scalaire, -eq geeft als resultaat True als de rechter kant is een exacte match, anders -eq geeft als resultaat Onwaar., -ne geeft theopposite; het geeft False terug als beide zijden overeenkomen; anders, -ne returnsTrue.

voorbeeld:

wanneer de linkerkant een verzameling is, -eq geeft die leden terug die overeenkomen met de rechterkant, terwijl -ne ze filtert.

voorbeeld:

1,2,3 -eq 2 # Output: 2"abc", "def" -eq "abc" # Output: abc"abc", "def" -ne "abc" # Output: def

Deze operators verwerken alle elementen van de verzameling. Voorbeeld:

"zzz", "def", "zzz" -eq "zzz"
zzzzzz

De equality-operators accepteren twee objecten, niet alleen een scalar of verzameling.,Maar het vergelijkingsresultaat is niet gegarandeerd zinvol voor de eindgebruiker.Het volgende voorbeeld toont het probleem aan.

False

in dit voorbeeld hebben we twee objecten met identieke eigenschappen gemaakt. Toch is het testresultaat onjuist omdat het verschillende objecten zijn. Om vergelijkbare klassen te creëren, moet u het systeem implementeren.IEquatable<T> in uw klasse. Het volgende voorbeeld toont de gedeeltelijke implementatie van amyfileinfoset klasse die systeem implementeert.,IEquatable<T> en heeft twee Properties, bestand en grootte. De methode Equals() geeft True terug als de eigenschappen bestand en grootte van twee objecten MyFileInfoSet gelijk zijn.

True

een prominent voorbeeld van het vergelijken van willekeurige objecten is om uit te vinden of ze volledig zijn. Maar als u moet bepalen of een variabele $null is, moet u$null aan de linkerkant van de equality operator zetten. Het op de goede kant zetten doet niet wat je verwacht.,

For example, let $a be an array containing null elements:

$a = 1, 2, $null, 4, $null, 6

The following tests that $a is not null.

$null -ne $a
False

The following, however, filers out all null elements from $a:

$a -ne $null # Output: 1, 2, 4, 6
1246

-gt, -ge, -lt, and -le

-gt, -ge, -lt, and -le behave very similarly., Als beide zijden scalarthey return True or False afhankelijk van hoe de twee zijden vergelijken:

Operator geeft True wanneer…,
-gt De linkerkant is meer
ge De linkerkant is groter of gelijk aan
-lt De linker kant is kleiner
-le De linker kant is kleiner of gelijk aan

In de volgende voorbeelden, alle verklaringen return True.

8 -gt 6 # Output: True8 -ge 8 # Output: True6 -lt 8 # Output: True8 -le 8 # Output: True

Note

in de meeste programmeertalen is de grootste operator >., In PowerShell wordt dit teken gebruikt voor omleiding. Zie voor meer informatie over_direction.

wanneer de linkerkant een verzameling is, vergelijken deze exploitanten elk lid van de verzameling met de rechterkant. Afhankelijk van hun logica, houden of verwerpen ze het lid.

voorbeeld:

Test collection:56789Members greater than 789Members greater than or equal to 7789Members smaller than 756Members smaller than or equal to 7567

deze operators werken met elke klasse die systeem implementeert.Vergelijkbaar.

voorbeelden:

het volgende voorbeeld toont aan dat er geen symbool is op een Amerikaans QWERTYkeyboard dat gesorteerd wordt na ‘a’., Het feeds een set met al deze symbolen aan de-gt operator om ze te vergelijken met’a’. De uitvoer is een lege array.

$a=' ','`','~','!','@','#','$','%','^','&','*','(',')','_','+','-','=', '{','}','',':',';','"','''','\','|','/','?','.','>',',','<'$a -gt 'a'# Output: Nothing

als de twee zijden van de operators niet redelijk vergelijkbaar zijn, geven deze operators een niet-beëindigingsfout.

overeenkomende operators

de syntaxis is:

wanneer de invoer van deze operators een scalaire waarde is, geven ze een Booleanwaarde terug. Wanneer de invoer een verzameling van waarden is, retourneren de operators anymatching leden. Als er geen overeenkomsten zijn in een verzameling, geven de operators een lege array terug.,

– like and-notlike

-like en -notlike gedragen zich vergelijkbaar met -eq en -ne, maar de rechterkant kan een tekenreeks zijn met jokertekens.

voorbeeld:

– match and-notmatch

-match en -notmatch gebruik reguliere expressies om naar patronen te zoeken in de waarden aan de linkerkant. Reguliere expressies kunnen overeenkomen met complexe patronen zoals e-mailadressen, UNC-paden of geformatteerde telefoonnummers., De rechter zijring moet zich houden aan de reguliere expressieregels.

scalaire voorbeelden:

als de invoer een verzameling is, retourneren de operators de overeenkomende leden van die verzameling.

Collectievoorbeelden:

-match en -notmatch ondersteunen Regex capture-groepen. Elke keer dat ze worden uitgevoerd, overschrijven ze de automatische variabele $Matches. Wanneer <input> Een verzameling is, is de variabele$Matches $null., $Matches is een hashtabel die altijd een sleutel met de naam ‘0’ heeft, die de hele overeenkomst opslaat. Als de reguliere expression capture-groepen bevat, bevat de $Matches extra sleutels voor elke groep.

voorbeeld:

TrueName Value---- -----domain CONTOSOuser jsmith0 was CONTOSO\jsmithDomain name:CONTOSOUser name:jsmith

voor details, zie about_Regular_Expressions.

Vervangende operator

vervanging met reguliere expressies

zoals -match, gebruikt de operator -replace reguliere expressies om het gespecificeerde patroon te vinden., Maar in tegenstelling tot -match, vervangt het de overeenkomsten met een andere gespecificeerde waarde.gebruik:

<input> -replace <regular-expression>, <substitute>

de operator vervangt een waarde geheel of gedeeltelijk door de opgegeven waarde met behulp van reguliere expressies. U kunt de operator gebruiken voor vele administratieve taken, zoals het hernoemen van bestanden. Bijvoorbeeld, het volgende commando verandert de bestandsnaamextensies van alle .txt bestanden naar .log:

Get-ChildItem *.txt | Rename-Item -NewName { $_.name -replace '\.txt$','.log' }

standaard is de operator -replace hoofdletterongevoelig., To make it casesensitive, use -creplace. To make it explicitly case-insensitive, use-ireplace.

Examples:

"book" -ireplace "B", "C" # Case insensitive"book" -creplace "B", "C" # Case-sensitive; hence, nothing to replace
Cookbook

Regular expressions substitutions

It is also possible to use regular expressions to dynamically replace textusing capturing groups, and substitutions. Capture groups can be referenced inthe <substitute> string using the dollar sign ($) character before thegroup identifier.,

In het volgende voorbeeld is de -replace operator accepteert een gebruikersnaam in de formof DomainName\Username en zet de [email protected] indeling:

[email protected]

Waarschuwing

De $ karakter heeft syntatic rollen in zowel PowerShell en regularexpressions:

  • In PowerShell, tussen dubbele aanhalingstekens, het wijst variabelen andacts als een sub-operator.,
  • In Regex-zoekstrings geeft het het einde aan van de regel
  • In Regex-substitutiestrings, geeft het vastgelegde groepen als zodanig aan, wees er zeker van dat u uw reguliere expressies tussen enkele aanhalingstekens plaatst of een backtick (`) teken ervoor plaatst.

bijvoorbeeld:

$$ in Regex geeft een letterlijke $aan. Deze $$ in de substitutie string om een letterlijke $ in de resulterende vervanging op te nemen., Bijvoorbeeld:

'5.72' -replace '(.+)', '$ $1' # Output: $ 5.72'5.72' -replace '(.+)', '$$$1' # Output: $5.72'5.72' -replace '(.+)', '$$1' # Output: $1

voor meer informatie, zie over_regular_expressions andSubstitutions in reguliere expressies.

substitueren in een verzameling

wanneer de <input> aan de -replace operator een verzameling is, past Powershel de vervanging toe op elke waarde in de verzameling. Bijvoorbeeld:

"B1","B2","B3","B4","B5" -replace "B", 'a'a1a2a3a4a5

vervanging door een scriptblok

in PowerShell 6 en hoger accepteert de operator -replace ook een scriptblok dat de vervanging uitvoert., Het script blok draait een keer voor elke wedstrijd.

Syntax:

<String> -replace <regular-expression>, {<Script-block>}

binnen het scriptblok, gebruik de $_ automatische variabele om toegang te krijgen tot de inputtext die wordt vervangen en andere nuttige informatie. Het class type isSystem van deze variabele.Tekst.RegularExpressions.Wedstrijd.

het volgende voorbeeld vervangt elke reeks van drie cijfers door de karakterequivalenten. Het script blok draait voor elke set van drie cijfers die moet bereplaced.,

"072101108108111" -replace "\d{3}", {return $_.Value}
Hello

Containment operators

the containment operators (-contains, -notcontains, -in, en -notin) zijn vergelijkbaar met de equality-Operators, behalve dat ze altijd een booleanwaarde retourneren, zelfs als de invoer een verzameling is. Deze operators stoppen met het vergelijken van assoon als ze de eerste match detecteren, terwijl de equality operators allinput leden evalueren. In een zeer grote collectie komen deze operatoren sneller terug dan de equality operators.,gebruik:

-bevat en-niet bevat

deze operatoren vertellen of een set een bepaald element bevat. -containsgeeft True terug wanneer de rechterkant (testobject) overeenkomt met een van de elementen in de set. -notcontains geeft in plaats daarvan False terug. Wanneer het testobject een verzameling is, gebruiken deze operators referentie-gelijkheid, dat wil zeggen ze controleren of een van de elementen van de verzameling dezelfde instantie van het testobject is.,

voorbeelden:

complexere voorbeelden:

-in en-notin

de -in en –notin operators werden geïntroduceerd in PowerShell 3 als de syntactische omgekeerde van de van contains en -notcontain Operators. -ingeeft True terug als de linkerkant <test-object> overeenkomt met een van de elementen in de set. -notin geeft in plaats daarvan False terug., Wanneer het testobject een verzameling is, gebruiken deze operators referentie-gelijkheid om te controleren of een van de elementen van de set dezelfde instantie van het testobject is.

de volgende voorbeelden doen hetzelfde als de voorbeelden voor -containen -notcontain, maar ze worden geschreven met -in en -notin.

complexere voorbeelden:

Typevergelijking

de operators voor typevergelijking (-is en -isnot) worden gebruikt om te bepalen of anobject een specifiek type is.,gebruik:

syntaxis:

Written by 

Geef een reactie

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