Datei aus Ordner mit Powershell per E-Mail versenden (Drag & Drop)

Hier ein kleines Powershell Script, das die in einem Ordner unter Windows vorhandenen Dateien per E-Mail an eine vorgegebene E-Mail Adresse verschickt und anschließend in einen Unterordner verschiebt.

Damit kann man z.B. automatisiert PDF-Dateien (oder auch andere Dateien) an eine RECHNUNGSEINGANG@ oder ARCHIV@ Mailadresse versenden.

## E-Mails mit Anhang aufgrund von Dateien in einem Ordner versenden
# Aufgabenplanung powershell starten mit
# powershell -ExecutionPolicy Unrestricted -file "G:\Meine Ablage\Systeme\Powershell\Belegdrop-email.ps1"

# Parameter & Einstellungen
$email_server = “smtp.mailserver.de”
$email_receiver="rechnungseingang@domain.de” # if this is empty, e-mail is disabled
$email_sender="belegdrop@domain.de"
$email_user = "belegdrop@domain.de"
$pw = ConvertTo-SecureString -String p_passwort -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $email_user, $pw  # oder (Get-Credential)

# die einzelnen Dateien ermitteln
$email_subject="Rechnung: ”
$folder1_path="G:\Meine Ablage\Rechnungseingang-Drop"
$p_filedone ="G:\Meine Ablage\Rechnungseingang-Drop\send-done"


# Dateien aus dem Rechungsordner einlesen
$hf_files=(Get-ChildItem $folder1_path -File).Name

foreach ($item in $hf_files)
{
    $hf_filename = $folder1_path + "\" + $item
    $hf_subject = $email_subject + $item

    write-host $item

    $error.Clear()
    # E-Mail mit Attachment verschicken
        send-mailmessage -from $email_sender -to $email_receiver -subject $hf_subject -Body "Rechnung im Anhang" -Attachments $hf_filename -dno onSuccess, 
        onFailure -smtpServer $email_server -UseSsl -Port 587 -credential $cred
    if ($error) {
        write-host $item $error
    }
    else {
        Move-Item $hf_filename -Destination $p_filedone
    }
    $error.clear()

}

# die einzelnen Dateien ermitteln
$email_subject="manuelle Ausgangsrechnung: ”
$folder1_path="G:\Meine Ablage\Rechnungsausgang-manuell-Drop"
$p_filedone ="G:\Meine Ablage\Rechnungsausgang-manuell-Drop\send-done"


# Dateien aus dem Rechungsordner einlesen
$hf_files=(Get-ChildItem $folder1_path -File).Name

foreach ($item in $hf_files)
{
    $hf_filename = $folder1_path + "\" + $item
    $hf_subject = $email_subject + $item

    write-host $item

    $error.Clear()
    # E-Mail mit Attachment verschicken
        send-mailmessage -from $email_sender -to $email_receiver -subject $hf_subject -Body "Rechnung im Anhang" -Attachments $hf_filename -dno onSuccess, 
        onFailure -smtpServer $email_server -UseSsl -Port 587 -credential $cred
    if ($error) {
        write-host $item $error
    }
    else {
        Move-Item $hf_filename -Destination $p_filedone
    }
    $error.clear()

}

exit

Etwas kniffelig ist wohl, wie man die Powershell Aufgabe anschließend in der Windows Aufgabenplanung startet. Bei mir funktioniert es aktuell mit:

als Aufgabe/Aktion C:\Windows\SysWOW64\cmd.exe starten
mit Parameter: /c „G:\Meine Ablage\Systeme\Powershell\Belegdrop.bat“

In der Batchdatei steht dann:

c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file "G:\Meine Ablage\Systeme\Powershell\Belegdrop-email-senden.ps1"
exit /b 0