Prüfung auf unzulässige Zeichen in Powershell

nagus
Goto Top
Frohe Weihnachten zusammen,

ich muss Email Adressen per PS erstellen, die ich von HR erhalte. Da die Kollegen*innen aber manchmal nicht ganz hellwach sind, bekomme ich auch Emailadressen die Sonderzeichen enthalten, weil einfach Vorname + Nachname zusammengesetzt wurden. Die Daten sind in einer CSV enthalten.

Ich möchte eigentlich nur prüfen ob unzulässige Zeichen enthalten sind und dafür True oder einen anderen Wert zurück geliefert bekommen.

Über eine Vergleichsliste alle Zeichen in dem String prüfen scheint mir nicht zielführend. Gibt's was einfacheres?

VG
Nagus

Content-Key: 1663957794

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

Ausgedruckt am: 16.08.2022 um 13:08 Uhr

Mitglied: 143611
143611 27.12.2021 um 19:19:15 Uhr
Goto Top
Moin,

eine konkrete Lösung hab' ich nicht, würde aber RegEx verwenden. Im www gibt's massig Beispiele für patterns zur Validierung von Mail-Adressen.

Viel Erfolg!
Mitglied: Nagus
Nagus 27.12.2021 um 19:20:26 Uhr
Goto Top
Hm - regex bin ich noch raus. Und bei der Suche bisher noch nicht fündig geworden ...
Aber ich guck noch ....

Thx
Nagsu
Mitglied: em-pie
Lösung em-pie 27.12.2021 um 20:05:25 Uhr
Goto Top
Moin,

RegEx hilft nur bedingt, wie man hier lesen kann: https://stackoverflow.com/questions/48253743/powershell-to-validate-emai ...

Durch RegEx ist es nicht ohne weiteres möglich, die ANSI-Zeichen herauszufiltern.

In obigem Link gibt es aber auch noch einen anderen Ansatz…



Werden die Daten durch eure HR manuell abgetippt? Oder kannst du dort die Mail-Adresse selbst zusammensetzen lassen? Dann müssen die z.B. nur die Spalten Vorname und Nachname füllen und Excel kombiniert die Felder selbst, ergänzt um das statische @company.tld
Mitglied: 149569
Lösung 149569 27.12.2021 um 20:51:29 Uhr
Goto Top
Mitglied: Nagus
Nagus 28.12.2021 um 09:24:04 Uhr
Goto Top
Hi em-pie,
HR Tippt selber in SAP und wir erhalten einen Export. Ich schreibe gerade ein neues Skript für die Useranlage und bin über den Punkt gestolpert.

Danke für den link, der ist ganz interessant. Bin noch am lesen face-smile
Mitglied: Nagus
Nagus 28.12.2021 um 10:01:48 Uhr
Goto Top
@149569, danke für den link, aber so richtig hat der mich auch nicht weiter gebracht.

ich baue mir jetzt eine Funktion die irgendwie so aus sehen wird:

Output

Beim schreiben gemerkt: meine Lösung so ist einfacher als alles was ich bisher gefunden habe. Mehr Zeit für die Suche als das Schreiben verbraten Oo
Ich denke bei der Massenverarbeitung sollte das auch noch ganz flott sein. Werde das dann noch um eine Prüfung auf zulässige Domains ergänzen und gut ist.
@em-pi, Dein Link hat mich auf den richtigen weg gebracht - thx

Guten Rutsch
Nagus
Mitglied: Nagus
Lösung Nagus 29.12.2021 um 12:11:33 Uhr
Goto Top
So, habe jetzt eine Funktion gebaut, die die Emails auf Sonderzeichen prüft, guckt, ob die email bereits im AD verwendet wird und noch schaut ob sie von einer der erlaubten Domänen kommt..
Hier die Funktion


Achtung: ich habe auch eine Funktion für das Logging gebaut und mit eingebunden. Wenn ihr das nicht braucht, einfach write-log in Write-host ändern und die Zahlen am Ende entfernen.
Als Rückgabe erfolgt NOK oder OK, wobei der genaue Fehler in das Log geschrieben wird

VG
Nagus
Mitglied: 149569
149569 29.12.2021 aktualisiert um 12:49:46 Uhr
Goto Top
$NotValidEmailChar='äüöàáèéòòß'.ToCharArray()
Tja, schreiben deine lieben Kollegen ausversehen einen Backslash oder sonstige ebenfalls nicht erlaubte Zeichen für E-MailAdressen rein geht dein Skript hops .... Kann bei meiner Variante mit der [System.Net.Mail.emailaddress] Klasse nicht passieren weil keinerlei Zeichen definiert werden müssen und alle ungültigen Zeichen bereits berücksichtigt werden, deswegen habe ich die ja gepostet face-wink. Des weiteren arbeitet der -match Parameter auf Regex-Basis, was das Skript ohne Escaping des Arrays ebenfalls vor die Wand fahren lässt wenn sich darin Regex-Sonderzeichen befinden.

Kannst du dir auch ne einfach Funktion draus machen falls du das Where-Objekt aus dem Code nicht verstanden hast


$check = $emailadress -match $a
Das ist ebenso fehlerhaft, wie oben gesagt benutzt -match Regex Syntax, richtig wäre
aber eine Schleife braucht man hier nicht da reicht der -in Vergeleichsoperator
Mitglied: em-pie
em-pie 29.12.2021 um 12:23:56 Uhr
Goto Top
Moin,

So überflogen schaut das ganz passabel aus. Danke für das Feedback face-smile

Ich würde aber anstelle von ok bzw. nok als Rückgabewerte $true bzw. $false wählen. Dann musst du bei den Ipf-Abfrahen nicht mit -eq arbeiten. Es reiche dann auch ein:
Mitglied: Nagus
Nagus 29.12.2021 aktualisiert um 13:14:00 Uhr
Goto Top
Moin hacktor,

wenn ich Deinen Code von TIO verwende. dann wird nur der Backslash als Fehler geworfen.

Ausgabe

Und das hilft mir nicht.

Auch Deine Funktion
Liefert mir nicht das erwartete Ergebnis_

Insofern bleibe ich bei meiner Funktion und vertraue darauf das SAP den Backslash abfängt
Mitglied: Nagus
Nagus 29.12.2021 aktualisiert um 13:09:30 Uhr
Goto Top
Zitat von @em-pie:

Moin,

So überflogen schaut das ganz passabel aus. Danke für das Feedback face-smile

Ich würde aber anstelle von ok bzw. nok als Rückgabewerte $true bzw. $false wählen. Dann musst du bei den Ipf-Abfrahen nicht mit -eq arbeiten. Es reiche dann auch ein:

Hatte ich mir am Anfang auch überlegt, aber weil ich das ganze nachher so darstelle dagegen entschieden.

Aber danke für den Tipp face-smile
Mitglied: rubberman
rubberman 29.12.2021 um 17:19:09 Uhr
Goto Top
Zufällig hier drüber gestolpert ...

Erstmal gefällt mir der Ansatz von @149569, denn alles was die .NET Klasse aussortiert, entspricht schon mal nicht den validen Mailadressen. Allerdings würde ich "Prüfung auf unzulässige Zeichen" dann zu "Prüfung auf zulässige Zeichen" umkehren. Einfach weil ich davon überzeugt bin dass die Menge der Zeichen die euren internen Konventionen entspricht ungleich kleiner ist, als die Menge der unzulässigen Zeichen.

Steffen