2016-08-09 63 views
0

Wir haben Benutzer, die auf eine E-Mail antworten, und wir müssen das in der Tabelle angegebene Datum abrufen.Regex zum Abrufen des Werts aus der Tabelle

Im Moment habe ich den folgenden Code ein, dass für uns zu tun:

$temp = ($Mail.Body.Text -creplace '(?m)^\s*\r?\n' -split "User name`r`n`tLogon name`r`n`tEnd date`r`n`tNew end date")[1] 
(($temp -split "`r`n`t")[3] -split "`r`n")[0] 

Wie Sie sehen, es ist ziemlich lang und sehr viel auf -split angewiesen zu sein. Gibt es eine einfachere Möglichkeit, das Datum abzurufen? Mit Select-String oder Regex oder etwas?

Das Tabellenformat in der E-Mail ist immer gleich, da die Benutzer das Datum in der HTML-Tabelle eingeben müssen. Also müssen wir in der Lage sein, diese Tabelle zu lesen. Im folgenden Beispiel wäre das Ergebnis 01/08/2016.

Beispiel einer solchen E-Mail:

Date added below 



From: GBR Service Desk 
Sent: Wendesday 29 juni 2016 7:00 
To: Bond, James (London) GBR 
Subject: REMINDER Expiring user: 
Importance: High 



Dear James 

This is a reminder e-mail to inform you that the following Windows user account will expire soon: 

User name 

    Logon name 

    End date 

    New end date 


Smith, Jobn (Manchester) GBR 

    jent 

    01/07/2016 

    01/08/2016 



Because you are registered as the manager of this user, we would like to ask you to verify if this account is still nee 
ded after its end date. More text... 

Yours sincerely 

Vielen Dank für Ihre Hilfe.

Antwort

2

könnten Sie Select-String verwenden Datum artige Muster und wählen Sie das letzte zu finden:

$EndDate = ($Mail.Body.Text |Select-String '\d{2}/\d{2}/\d{4}' -AllMatches).Matches[-1].Value 
+0

Das ist ein wirklich guter Tipp! Danke Mathias :) Aber manchmal tippen sie da etwas wie "8 Augustus". In diesem Fall muss ich das haben .. – DarkLite1

+0

@ DarkLite1: Und wie viele Formate/menschliche Sprachen werden Sie unterstützen? Fügen Sie das dem Fragenkörper hinzu. –

+0

Ich stimme zu, markiert dies als gelöst. – DarkLite1