Im letzten Blogeintrag haben wir uns die Aufgabenplanung mit der PowerShell angesehen.
In diesem Blogeintrag geht es seit langem mal wieder um die ursprüngliche Grundidee des Blogs: Die Unterschiede der PowerShell in den verschiedenen Sprachpaketen.
Zuerst ein persönlicher Wunsch: Ich hoffe, dass der Krieg gegen die Ukraine bald vorbei ist und wieder Frieden in Europa herrscht.
Das Thema:
Bei einem Kunden bin ich über einen Exchange Server gestolpert, der in Südkorea läuft und mit dem südkoreanischen Sprachpaket installiert wurde.
Die Exchange PowerShell ist bekannt dafür, dass bei manchen Befehlen ein Mix aus Englisch und der jeweils installierten Sprache genutzt werden muss.
Konkret ging es hier darum, in einem Postfach gesendete und Empfangene E-Mails älter 2 Jahre zu löschen.
Der Befehl für eine solche Suche heißt Search-Mailbox.
Grob so:
Search-Mailbox -Identity "Mailbox Name" -SearchQuery 'Hier wird gefiltert' -DeleteContent -Force
Search-Mailbox -Identity "Mailbox Name" -SearchQuery 'Hier wird gefiltert' -DeleteContent -Force
Auf einem Englischen Server geht das noch relativ einfach. Das Datumsformat lautet Monat/Tag/Jahr
Search-Mailbox -Identity "Mailbox Name" -SearchQuery 'received<=03/25/2020 AND sent<=03/25/2020' -DeleteContent -Force
Search-Mailbox -Identity "Mailbox Name" -SearchQuery 'received<=03/25/2020 AND sent<=03/25/2020' -DeleteContent -Force
Der Suchfilter "Searchquery" nutzt die Keyword Query Language (KQL)
Diese wird recht versteckt von Microsoft für die Exchange PowerShell hier beschrieben und noch detaillierter hier beschrieben.
Bei einem in Deutsch aufgesetzten Exchange Server 2013 wird es dann schon komplizierter.
Die Searchquery hätte nämlich gerne ein deutsches Datum und deutsche Suchbegriffe - den Operator "AND" aber weiterhin auf Englisch
So sieht das dann aus:
Search-Mailbox -Identity "Mailbox Name" -SearchQuery '"Empfangen<= 03.05.2020 AND Gesendet<= 03.05.2020' -DeleteContent -Force
Search-Mailbox -Identity "Mailbox Name" -SearchQuery '"Empfangen<= 03.05.2020 AND Gesendet<= 03.05.2020' -DeleteContent -Force
Ganz kompliziert wird des dann auf einem südkoreanischen Exchange Server.
Hier war ein Mix aus Englisch und Südkoreanisch gefordert.
Aber wie finde ich raus, wie das Datum 25.03.2022 auf Südkorenanisch dargestellt wird?
Die bestehende Sprachkultur einer Konsole kann ich mit folgendem Befehl sehen
Get-Host | FL CurrentCulture
Get-Host | FL CurrentCulture
Die möglichen "globalen" Spracheinstellungen der PowerShell kann ich mir unabhängig von der PowerShell Version am einfachsten über die passende .NET Klasse anzeigen lassen
[System.Globalization.CultureInfo]::GetCultures([System.Globalization.CultureTypes]::AllCultures)
[System.Globalization.CultureInfo]::GetCultures([System.Globalization.CultureTypes]::AllCultures)
Ein .count zeigt 859 verschiedene Sprachversionen (unsere Erde ist einfach sehr multikulturell)
Und jetzt filtere ich nach "Korea"
[System.Globalization.CultureInfo]::GetCultures([System.Globalization.CultureTypes]::AllCultures) | where {$_.displayname -like "*Korea*"}
[System.Globalization.CultureInfo]::GetCultures([System.Globalization.CultureTypes]::AllCultures) | where {$_.displayname -like "*Korea*"}
Das Ergebnis: Korea (Korea) - es gäbe auch Korea (Nordkorea) - hat das Sprachkürzel ko-KR
Mit einer anderen Methode aus der .NET Klasse lese ich das koreanische Datumskurzformat aus.
([System.Globalization.CultureInfo]::GetCultureInfo("ko-KR")).DateTimeFormat.ShortDatePattern
yyyy-MM-dd
([System.Globalization.CultureInfo]::GetCultureInfo("ko-KR")).DateTimeFormat.ShortDatePattern yyyy-MM-dd
D.h. das Datumskurzformat lautet 4 Stellen für das Jahr - 2 Stellen für dem Monat - 2 Stellen für den Tag: 2022-03-25
Die Suchabfrage muss also folgendermaßen aussehen bei einem englischen Exchange Server mit koreanischen Sprachpaket:
Search-Mailbox -Identity "Mailbox Name" -SearchQuery 'received<=2020-03-25 AND sent<=2020-03-25' -DeleteContent -Force
Search-Mailbox -Identity "Mailbox Name" -SearchQuery 'received<=2020-03-25 AND sent<=2020-03-25' -DeleteContent -Force
Wenn ihr mit dem Search-Mailbox Befehl arbeiten müsst, dann ist leider manchmal herumprobieren angesagt mit verschiedenen Sprachversionen in der Search Query.
Viel Erfolg 🙂
Was denken Sie?