Prüfung auf unzulässige Zeichen in Powershell
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1663957794
Url: https://administrator.de/contentid/1663957794
Ausgedruckt am: 05.11.2024 um 04:11 Uhr
12 Kommentare
Neuester Kommentar
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!
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!
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
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
$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 . 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
function Validate-EMailAddress([string]$email) {
try{
$null=[mailaddress]$email
return $true
}catch{return $false}
}
Validate-EMailAddress 'user@domain.tld' # not valid, returns $false
Validate-EMailAddress 'user@domain.tld' # valid, returns $true
$check = $emailadress -match $a
Das ist ebenso fehlerhaft, wie oben gesagt benutzt -match Regex Syntax, richtig wäre$check = $emailadress -match [regex]::escape($a)
$check = $emailadress.split("@")[1] -in $allowedDomains
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
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.
Function Get-IsValidMailAddress([string]$addr) {
try {$null = [Net.Mail.MailAddress]$addr} catch {return $False} # pass only if .NET treats it to be valid
if ($addr -notmatch '^[a-z0-9@\.]+$') {return $False} # pass only if custom requirements are met
# more checks?
return $True
}
Get-IsValidMailAddress 'us\er@domain.tld' #false
Get-IsValidMailAddress 'user@dom@in.tld' #false
Get-IsValidMailAddress 'user@domain.tld' #false
Get-IsValidMailAddress 'usèr@domain.tld' #false
Get-IsValidMailAddress 'UsEr@domain.tld' #true
Steffen