1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[PowerShell] Ordner scannen, bestimmte Daten Filtern und versenden

Dieses Thema im Forum "Sonstige Sprachen" wurde erstellt von kanada, 1. Dezember 2016.

  1. kanada

    kanada Mitglied

    Hallo,

    ich möchte mit einem kleinen Script einen Ordner überwachen und zwar wie folgt. In dem Ordner befinden sich verschiedene (Unter)Ordner, ich möchte einmal am Tag (wenn der PC gestartet wird) den Ordner scannen und dabei die Unterordner erfassen nach ihrem Erstell/Änderungsdatum. Ist nun ein Ordner oder mehrere älter als x-Tage soll eine Automatische email versenden werden, die den Unterordner Namen enthält, der schon älter als x-Tage ist.

    Die Ordner mit ihren Erstellungsdatum etc. kann ich ja so erfragen:
    Code (Text):
    1. [String] $folder="W:\Test\";
    2. Get-ChildItem -Path $folder | SELECT Attributes, Name, CreationTime, LastWriteTime | Format-Table -AutoSize;
    und die Email folgendermaßen:
    Code (Text):
    1. function sendmail($body)
    2. {
    3.     $SmtpClient = new-object system.net.mail.smtpClient
    4.     $MailMessage = New-Object system.net.mail.mailmessage
    5.     $SmtpClient.Host = "smtp-server-adresse"
    6.     $mailmessage.from = "absender@email.de"
    7.     $mailmessage.To.add("empfänger1@email.de")
    8.     #$mailmessage.To.add("empfänger2@email.de")
    9.     $mailmessage.Subject = “Betreff (" + (Get-Date).ToShortDateString() + ")”
    10.     $MailMessage.IsBodyHtml = $false
    11.     $mailmessage.Body = $body
    12.     $smtpclient.Send($mailmessage)
    13. }
    14.  
    15. $body = "Nachricht Text"
    16.  
    17. sendmail $body
    Nun bräuchte ich noch die Brücke zwischen den beiden Code Schnipsel, komme da leider nicht weiter, vielleicht kann mir da einer helfen bzw. die passende und zündende Idee geben, Danke :)
     
  2. HonniCilest

    HonniCilest Erfahrenes Mitglied

    Soll für jeden Ordner eine Mail versendet werden oder alle Ordner gesammelt in einer Mail?

    Ich habe das nicht getestet, aber aus meiner Erfahrung mit Powershell heraus sollte es in etwa so gehen:
    Code (Text):
    1. # Bulk-Mail
    2. Get-ChildItem C:\temp -Directory -Recurse | ?{
    3. (New-TimeSpan $_.CreationTime (get-date)).Days -ge 1
    4. } | SELECT Attributes, Name, CreationTime, LastWriteTime | Format-Table -AutoSize
    5. | #write email with pipe-content ($_) as mail
    6.  
    7.  
    8. # Einzelmail
    9. Get-ChildItem C:\temp -Directory -Recurse | ?{
    10. (New-TimeSpan $_.CreationTime (get-date)).Days -ge 1
    11. } | SELECT Attributes, Name, CreationTime, LastWriteTime | Format-Table -AutoSize
    12. | %{
    13. #write email with pipe-content ($_) as mail
    14. }
    Im Beispiel werden nur Verzeichnisse gefunden
    ?{} ist wie ein WHERE Statement zu werten
    Im Beispiel werden alle Ergebnisse angezeigt die mindetsens 1 Tag alt sind
    %{} ist wie ein FOREACH zu werten
     
    Zuletzt bearbeitet: 2. Dezember 2016
Die Seite wird geladen...