waterfall
Goto Top

Geburtstagsdatum aus einer CSV-Datei auslesen und mit aktuellen Datum vergleichen

Hallo zusammen,

hab echt ein Problem und hoffe Ihr könnt mir helfen. Im (cmd) Scripting bin ich leider noch ein Anfänger.

Es soll aus einer CSV-Datei, in der alle Geburtstagsdatums unseres Mitarbeiterstammes eingetragen sind, geprüft werden ob jemand der in dieser CSV Datei stehen an diesen Tag Geburtstag hat.
Bsp.
Karl Mustermann, Einkauf, 09.07.1990.
Eva Mustermann, Empfang, 14.03. 2001

Das Script soll den Inhalt der CSV-Datei durchsuchen, und die dahin befindlichen Geburtstagsdatums mit dem aktuellen Datum vergleichen.
Wird eine Übereinstimmung gefunden ,soll der Vor- und Nachnahme, Abteilung und das Geburtstagsdatum ( Bsp: Karl Mustermann, Einkauf, 09.07.1990)
in ein Email geschrieben werden und an eine Gruppe von Benutzer gesandt werden. Gibt es keine Übereinstimmung soll nichts gemacht werden.

Hat jemand eine Idee?


Vielen Dank vorab vor eure Hilfe.

Content-Key: 394549

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

Printed on: April 27, 2024 at 18:04 o'clock

Member: em-pie
em-pie Dec 03, 2018 at 20:31:50 (UTC)
Goto Top
Moin,

Nimm die Powershell und verbinde zwei Funktionen:
Du musst zunächst die CSV Einlesen:
https://stackoverflow.com/questions/16682744/read-a-csv-file-with-powers ...

Zum einen kannst du Daten wie folgt vergleichen: https://stackoverflow.com/questions/5097125/powershell-comparing-dates

Vermutlich kann man auch beides in einer Befehlszeile kombinieren, bin aber auch kein Powershell-Spezi ...

Gruß
em-pie
Member: Kraemer
Kraemer Dec 04, 2018 at 07:42:31 (UTC)
Goto Top
Moin,
Zitat von @waterfall:
Hat jemand eine Idee?
ja, eine ganz verrückte: Benutzt Kalender!

Gruß
Mitglied: 137846
Solution 137846 Dec 04, 2018, updated at Dec 05, 2018 at 13:46:01 (UTC)
Goto Top
Kalender scheinen die unter dem "Wasserfall" nicht zu kennen face-big-smile
$today_birthday = (Import-CSV 'd:\Geburtstage.csv' -delimiter ',') | ?{(get-date $_.Geburtstag).Date -eq (get-date).Date} | ConvertTo-HTML -Fragment | out-string  
If ($today_birthday){
    Send-Mailmessage -From Sender@domain.tld -to receiver@domain.tld -Subject "Heutige Geburtstagskinder" -Body $today_birthday -BodyAsHtml -Encoding UTF8 -SMTPServer server.domain.tld -UseSSL  
}
Und tschö.
Member: waterfall
waterfall Dec 04, 2018 at 19:46:36 (UTC)
Goto Top
Hi answer,
sorry hab leider ein Problem mit dem get-date.
Gebe ich die Zeile in die PowerShell ein, bekomme ich folgende Fehlermeldung.


PS C:\Users\xxxxx> $today_birthday = (Import-CSV 'c:\temp\Geburtstag.csv' -delimiter ';' -Header ("Name","Vorname","Abte
ilung","Geburtstag")) | ?{(get-date $_.Geburtstag).Date -eq (get-date).Date}

Get-Date : Der Parameter "Date" kann nicht gebunden werden. Der Wert "Geburtstag" kann nicht in den Typ
"System.DateTime" konvertiert werden. Fehler: "Die Zeichenfolge wurde nicht als gültige DateTime erkannt. Ein
unbekanntes Wort beginnt bei Index 0."
In Zeile:1 Zeichen:138

back-to-top... rname","Abteilung","Geburtstag")) | ?{(get-date $_.Geburtstag).Date - ...

back-to-top~~~~~~~~~~~~~

+ CategoryInfo : InvalidArgument: (face-smile [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.GetDateCommand

Stimmt die Zuweisung von get-date nicht?
Danke dir für deine Hilfe.
meldung
Mitglied: 137846
137846 Dec 05, 2018 updated at 11:32:32 (UTC)
Goto Top
Der Code funktioniert wenn deine CSV keine Überschriften hat, hast du ja leider nicht geschrieben. Sollte sie das aber haben, musst du einfach nur den Parameter -Header mit den Spaltennamen weglassen, die werden dann automatisch so benannt wie in der ersten Zeile der CSV.
Denn wenn man die Header per Parameter angibt dann wird die erste Zeile der CSV als Daten interpretiert und nicht als Überschriften und deshalb auch die Fehlermeldung das er das Wort "Geburtstag" nicht in ein Datum umwandeln kann (verständlicherweise).
Member: waterfall
waterfall Dec 05, 2018 at 13:29:25 (UTC)
Goto Top
Hi answer,

ersmal vielen herzlichen Dank, das du mir so sehr behilflich bist.
Leider bekomme schon wieder eine Fehlermeldung beim Ausführen des Scripts in der PowerShell.

Send-MailMessage : "System.Object" kann nicht in den Typ "System.String" konvertiert werden, der für den Parameter "Body" erforderlich ist. Die angegebene Methode wird nicht unterstützt.
Bei Zeile:2 Zeichen:120

back-to-topIf ($today_birthday){Send-Mailmessage -From xx.xx@xxx.de -to xx.xx@xxx.xx.de -Subject "Heutige Geburtstagskinder" -Body <<<< $today_birthday -BodyAsHtml -Encoding UTF8 -SMTPServer xx.xxx.xx -UseSSL


Kannst du mir bitte weiterhelfen?
Mitglied: 137846
137846 Dec 05, 2018 updated at 13:45:08 (UTC)
Goto Top
Nochmal kopieren, typo.
Member: waterfall
waterfall Dec 05, 2018 at 19:29:05 (UTC)
Goto Top
Hi answer,

hier die Fehlermeldungen(Bild) die ich von der PowerShell angezeigt bekomme.

Danke dir für deine Hilfe.
meldung
Mitglied: 137846
137846 Dec 05, 2018 updated at 19:58:40 (UTC)
Goto Top
Tja, erstens stimmen deine Quelldaten nicht, du hast uns ja noch nicht mal ein vollständiges Beispiel der ersten Zeilen deiner CSV geliefert, da können wir noch so viel raten wie wir wollen face-sadface-sad

Zweitens gibst du ja keine Credentials zur Auth am Mailserver an, deswegen lässt er dich nicht senden .

Ich hätte jetzt zumindest erwartet daß du dir die Doku zu den CMDLets zumindest mal ansiehst. Jeder Mailserver hat ja andere Anforderungen, das war nur ein rudimentäres Beispiel.
Sorry, aber einen Anfängerkurs gebe ich hier nicht, das ist Administrator.de nicht Gutefrage.net.
Member: waterfall
waterfall Dec 05, 2018 at 21:10:33 (UTC)
Goto Top
Hi answer,

sorry, tut mir leid, das ich dich verärgert habe, aber die Credentials sind nicht mein Problem, sondern der Parameter "Date".
Kannst du da mir nicht noch mal behilflich sein?

Danke dir sehr.