WinFuture-Forum.de: PowerShell String auf Punkt überprüfen - WinFuture-Forum.de

Zum Inhalt wechseln

Windows 10: Alle News, der Download sowie zahlreiche Screenshots und Videos zum neuen Betriebssystem von Microsoft. Jetzt im WinFuture Windows 10 - Special informieren!
Seite 1 von 1

PowerShell String auf Punkt überprüfen


#1 Mitglied ist offline   TheBlackDragon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 24
  • Beigetreten: 05. Juni 19
  • Reputation: 0

geschrieben 27. August 2019 - 10:17

Sehr geehrte Damen und Herren,

in meinem Skript möchte ich gerne meine zuvor eingegebene E-Mail Adresse auf einen Punkt "." und das Zeichen "@" überprüfen, ob dieser vorhanden ist.
Beispielweise sieht die Mail so aus:
[email protected]

Mein bisheriges Skript sieht so aus:

function test_Owner_Mail_auf_gueltigkeit {
    param
    (   
        [string] $Personennamen
    )

    $TestMail=$Personennamen
    if($inputtempString=$TestMail -match '.'){
        if($inputString=$TestMail -match '@'){
            <#
            if($inputString -and $inputtempString -eq $false ){
                Write-Host "`n Fehlerhafte E-Mail. Skript wird beendet !!"
                break;
            }elseif($inputString -eq $false -and $inputtempString -eq $true){
                Write-Host "`n Fehlerhafte E-Mail. Skript wird beendet !!"
                break;
            }elseif($inputtempString -eq $false -and $inputString -eq $true){
                Write-Host "`n Fehlerhafte E-Mail. Skript wird beendet !!"
                break;
            }#>
            if($inputString -and $inputtempString -eq $true){}
        }elseif($inputString -eq $false){
            Write-Host "`n Fehlerhafte E-Mail. Skript wird beendet !!"
            break;
        }
    }elseif($inputtempString -eq $false){
        Write-Host "`n Fehlerhafte E-Mail. Skript wird beendet !!"
        break;
    }
}



Die Funktion test_Owner_Mail_auf_gueltigkeit wird mit Übergabe der Variable $Personennamen aufgerufen.
Die Abfrage, ob das Zeichen "@" vorhanden ist, funktioniert ohne Probleme und löst bei fehlenden Zeichen ein False und somit ein Break aus.

Nun verstehe ich nicht, warum die Abzweigung und das Auslesen von "." nicht funktioniert.
Das Skript wird dennoch ausgeführt, auch wenn ich bei der Eingabe der Mail diese nicht gültige Mail MaxMustermann@Firmade eintrage.

In dieser Mail ist nirgends ein Punkt zu sehen somit sollte ein false angegeben und das Skript soll abgebrochen werden.


Hoffentlich könnt ihr mir dabei weiterhelfen.
Finde auch nichts diesbezüglich im Internet.

Mit freundlichen Grüßen
Alex
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 27. August 2019 - 15:08

Du machst einen regex Test und der liefert True, solange es auch nur ein Zeichen gibt.

Sag stattdessen -Match /^[^@]{1,}@[a-z0-9\.-]+\.[a-z]{2,}

oder sowas in der Art.

Das akzeptiert beliebige Useraccounts außer mit @, das bewußte @ exakt einmal plus eine gültige DNS Domain hintendran.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   TheBlackDragon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 24
  • Beigetreten: 05. Juni 19
  • Reputation: 0

geschrieben 28. August 2019 - 07:46

Guten Morgen RalphS,

werde dieses Testen und im Anschluss bescheid geben, ob mein Skript funktioniert

Mit freundlichen Grüßen
Alex
0

#4 Mitglied ist offline   TheBlackDragon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 24
  • Beigetreten: 05. Juni 19
  • Reputation: 0

geschrieben 28. August 2019 - 08:03

Hey RalphS,

habe das Skript etwas umgebaut, nun zeigt er mir immer False an.
Was mach ich falsch. Anscheinend verstehe ich nicht:

Zitat

Sag stattdessen -Match /^[^@]{1,}@[a-z0-9\.-]+\.[a-z]{2,}


Könntest du mir das bitte anhand meines Skriptes erklären.
Der unten zu findende Code ist meine erneute Anpassung.

function test_Owner_Mail_auf_gueltigkeit { 
    param
    (   
        [string] $Personennamen
    )

    $TestMail=$Personennamen
    if($inputString=$TestMail -match '/^[^@]{1,}@[a-z0-9\.-]+\.[a-z]{2,}'){

        if($inputString -eq $true){Write-Host $inputString "test"}

    }elseif($inputString -eq $false){
        $inputString
        Write-Host "`n Fehlerhafte E-Mail. Skript wird beendet !!"
        break;
    }
}

$Personennamen=Read-Host "Eingabe einer E-Mail"
test_Owner_Mail_auf_gueltigkeit $Personennamen




Wie zuvor schon gesagt, ich finde hierzu leider nichts im Netz daher wäre ich deiner Hilfe sehr sehr dankbar.

Mit freundlichen Grüßen
Alex

Dieser Beitrag wurde von TheBlackDragon bearbeitet: 28. August 2019 - 08:06

0

#5 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 28. August 2019 - 13:00

Da fehlt zumindest der / am Ende, sorry. Kann auch grad nicht selber testen, bin bis Ende der Woche im richtigen Germanenland aka Skandinavien.

Die / sind Begrenzer für Regex, kein ” oder ‘ erforderlich. Alternativ gar kein / und wie einen String verwenden.

Stück für Stück:

^[^@]{1,} Stringanfang (^) beliebiges Zeichen außer @ , davon mindestens eines. Nicht so restriktiv wie sein könnte.
Bsp. a in [email protected] oder ralphs in [email protected]. Niemals im Teil nach dem @, auch nicht in [email protected]. Dort wärs das erst a und nur das.
Nb, erlaubt auch sowas wie Leerzeichen oder Tab. Oder allgemein Zeichen, die ggfs in diesem Teil der Mailadresse nicht erlaubt sind. Ggfs weiter einschränken.

@ Das Literal @ selber. Ohne dieses war’s keine Mailadresse.


[a-z0-9\.-]+ Die maildomain ohne Tld. Web in Web.de oder Students.uni-Berlin in [email protected] . Bei in AT oder UK üblichen Denominierungen sozusagen einschließlich der ersten halben tld, auch wenn es syntaktisch keine ist. In [email protected] zb steckt das ORG noch drin, das uk aber nicht mehr.

\. Das Literal „.“. Da der Punkt im Regex eine besondere Bedeutung hat: Escapezeichen davor.

[a-z]{2,} Die tld. Normalerweise das Länderkürzel de oder fr oder halt com, net usw. Inzwischen gibts die Beschränkung auf drei Zeichen nicht mehr, daher zwei bis beliebig viele Buchstaben für sowas wie info@bürgeramt.marzahn.

Falls zu streng gefiltert werden sollte ggfs den fraglichen Teil entspannen. Adressen ohne tld sind technisch möglich, werden aber nicht zugelassen, ebenso wie @(ipadresse). Maximallängen werden auch nicht beachtet.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#6 Mitglied ist offline   TheBlackDragon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 24
  • Beigetreten: 05. Juni 19
  • Reputation: 0

geschrieben 28. August 2019 - 14:15

Vielen Dank für die Rasche Nachricht RalphS.

Der E-Mail Abgleich hat bei mir funktioniert.
Wenn bei der E-Mail ein @ oder der hintere Punkt fehlt, wird ein Fehler ausgelöst.

Das einzige was nicht klappt, ist der Abgleich, dass der vordere, der erste Punkt bei der Mail vorhanden ist.
Max.[email protected].

Vielen Dank nochmal und noch eine schöne Zeit im

Zitat

richtigen Germanenland aka Skandinavien
.

MfG
Alex
0

#7 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 28. August 2019 - 19:53

Soll der da sein? Dann füg ihn ein.

Und zwar nach folgendem Schema.

Ganz vorne ein ^ um die Angabe ans erste Zeichen zu binden. Ansonsten kann die Mailadresse ein beliebiger Teilstring sein.

[ ... ] bezeichnet ein einzelnes Zeichen aus einer Menge von Zeichen. Ps -match ignoriert Klein/Groß, ist in diesem Fall irrelevant.

Diese Menge kann quantifiziert werden.
Mit ?: kein oder einmal. Entspricht {,1}
One extra: exakt 1x, {1,1}
Mit *: beliebig oft, {,}
Mit +: mindestens einmal, {1,}
Exakt geht es mit {x,y} wobei x und y Zahlen größer 0 sind: mindestens x, maximal y oft. Keine Angabe gleich unbegrenzt gemäß Beispiel oben.

Entsprechend paßt ^[a-z]+\.[a-z]+ auf Vorname.Nachname, aber auch auf M.Mustermann und Max.M . Soll das nicht gehen, kann man mit {2,} oder dergleichen mindestens zwei Buchstaben vor/nach dem Trenn-Punkt erzwingen. Der Punkt ist Pflicht.

Worauf es NICHT paßt sind ANDERE Zeichen. Max.M0sterm4nn geht ebensowenig wie Max-Mustermann oder gar Max-Maria.Muster. Sowas müßte mit ? qualifiziert eingefügt oder als weitere(s) Zeichen in [] aufgenommen werden.

Wichtig auch, [a-z\.] ist nicht dasselbe wie der Ausdruck oben. Dies erlaubt den Punkt. Es erzwingt ihn aber nicht.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#8 Mitglied ist offline   TheBlackDragon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 24
  • Beigetreten: 05. Juni 19
  • Reputation: 0

geschrieben 29. August 2019 - 13:58

Vielen Dank für die Antwort.

Werde dieses testen sobald ich wieder im Büro bin.

Mit freundlichen grüßen
Alex
0

#9 Mitglied ist offline   TheBlackDragon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 24
  • Beigetreten: 05. Juni 19
  • Reputation: 0

geschrieben 02. September 2019 - 07:56

Hallo RalphS,

hat leider etwas länger gedauert.
Das von die beschriebene funktioniert bei mir gut.

Mit freundlichen Grüßen
Alex

Vielen Dank für deine Hilfe
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0