[PowerShell] Ordner scannen, bestimmte Daten Filtern und versenden


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:
[String] $folder="W:\Test\";
Get-ChildItem -Path $folder | SELECT Attributes, Name, CreationTime, LastWriteTime | Format-Table -AutoSize;

und die Email folgendermaßen:
Code:
function sendmail($body)
{
    $SmtpClient = new-object system.net.mail.smtpClient
    $MailMessage = New-Object system.net.mail.mailmessage
    $SmtpClient.Host = "smtp-server-adresse"
    $mailmessage.from = "absender@email.de"
    $mailmessage.To.add("empfänger1@email.de")
    #$mailmessage.To.add("empfänger2@email.de")
    $mailmessage.Subject = “Betreff (" + (Get-Date).ToShortDateString() + ")”
    $MailMessage.IsBodyHtml = $false
    $mailmessage.Body = $body
    $smtpclient.Send($mailmessage)
}

$body = "Nachricht Text"

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 :)
 

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:
# Bulk-Mail
Get-ChildItem C:\temp -Directory -Recurse | ?{
(New-TimeSpan $_.CreationTime (get-date)).Days -ge 1
} | SELECT Attributes, Name, CreationTime, LastWriteTime | Format-Table -AutoSize
| #write email with pipe-content ($_) as mail


# Einzelmail
Get-ChildItem C:\temp -Directory -Recurse | ?{
(New-TimeSpan $_.CreationTime (get-date)).Days -ge 1
} | SELECT Attributes, Name, CreationTime, LastWriteTime | Format-Table -AutoSize
| %{
#write email with pipe-content ($_) as mail
}

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: