cpython
Goto Top

Powershell - Where Abfrage mit Array vergleichen?

Guten Morgen zusammen,

ich habe eine recht einfache Frage bei der ich aber alleine nicht weiterkomme.
Ich habe ein Befehl welcher mir Die MailboxPermissions vom Exchange auflistet. Dort möchte ich jedoch die Anzeige so manipulieren dass mir die Zeilen mit gewissen Wörtern nicht ausgegeben werden da diese Datensätze nicht relevant für mich sind.

Hier einmal der bisherige Code:

$notLike=@('*Wort1*','*Wort2*','*Wort3*')  

get-mailbox -ResultSize:Unlimited | Get-MailboxPermission | select identity,user,accessrights | where {($_.User -like '*@*') -and ($_.User -notlike $notLike)}  


Ich habe gedacht man kann nach dem Vergleichsoperator -notlike einfach mein Array mit den drei Wörtern angeben und die PowerShell vergleicht mit allen Wörtern. Dem ist wohl nicht so.
Wie kann ich das am geschicktesten lösen? Ich könnte noch ein paar -and's dranhängen, bei drei Wörtern geht das ja noch. Aber da gibt es doch bestimmt eine geschicktere Lösung oder?

Wie würdet Ihr das machen?

Vielen Dank
Gruß

Content-ID: 908888198

Url: https://administrator.de/contentid/908888198

Ausgedruckt am: 19.10.2024 um 15:10 Uhr

TK1987
Lösung TK1987 05.07.2021 aktualisiert um 11:45:04 Uhr
Goto Top
Moin,

ich würde da stattdessen mit -NotMatch arbeiten, da hierbei Reguläre Ausdrücke funktionieren und so einfach nach mehreren Begriffen mittels Pipe von einander getrennt gesucht werden kann (sprich "Wort1|Wort2|Wort3").

Sofern in den Begriffen Regex-Steuerungszeichen vorhanden sind, müssen diese allerdings Escaped werden:
$notMatch      = @('Wort1','Wort2','Wort3')  
$notMatchRegex = ( $notMatch | %{ [regex]::Escape($_) } ) -Join '|'  

get-mailbox -ResultSize:Unlimited | Get-MailboxPermission | select identity,user,accessrights | ? {$_.User -NotMatch $notMatchRegex}
Hinweis:
    • % ist ein Alias für Foreach-Object
    • ? ist ein Alias für Where-Object

Regex Tutorial
Regex Legende

Gruß Thomas