Leider gibt es immer wieder Programme, die nicht als Dienst installiert werden können, aber täglich laufen müssen.

Als Beispiel haben wir hier den Birthdaymailer. Dieses Programm verschickt um 8:00 Emails an die Kunden, die Geburtstag haben.

Das Programm ist auf einem Windows Server 2008 R2 installiert. Eine Installation als Hintergrunddienst ist nicht möglich. Es gibt natürlich Programme, wie RunAsSvc um Executables als Dienst einzurichten, jedoch funktionierte dies im Zusammenhang nicht zuverlässig, da der Email Versand manchmal versagte. Dadurch wird eine Fehlermeldung angezeigt auf die nicht reagiert wird.

Zur Erklärung:

Wenn ein Benutzer angemeldet ist, läuft der Prozess bmstart.exe im Hintergrund. Um 8:00 Uhr wird das Hauptprogramm Birthdaymailer (bm.exe) gestartet und die entsprechenden Emails versendet. Danach schließt sich das Programm wieder, sofern keine Fehlermeldung erscheint. Komischerweise bleibt das Programm auch ohne Fehlermeldung manchmal offen. Das Problem hierbei ist, dass am folgenden Tag keine Emails verschickt werden, solange das Hauptprogramm geöffnet ist.

In diesem Zusammenhang habe ich ein Skript geschrieben, welches einen Benutzer per RDP an den Server anmeldet. Bei der Anmeldung wird, wie bereits erwähnt, automatisch der Prozess bmstart.exe geladen. Wenn das Hauptprogramm noch offen ist, wird dies geschlossen und der Benutzer wird vom Server getrennt (nicht abgemeldet).

Das Skript sieht wie folgt aus:

$servername = "server"
$passwort = "birthdaymailer"

Function Open-RDPSession($Server,$User,$Password)
{
    Write-Host "- saving RDP credential" -ForegroundColor green
    cmdkey /generic:$server /user:$user /pass:$Password
    write-Host "- opening RDP" -ForegroundColor green
    mstsc /v:$Server /W:800 /h:600

}

$username = "domain\birthdaymailer"

Open-RDPSession $servername $username $passwort

Start-Sleep -s 80

qwinsta /server:$servername | ?{$_ -match "birthdaymailer"} | ?{$_ -match "rdp-tcp#\d*"} | %{tsdiscon $matches[0]}

Start-Sleep -s 5

Get-Process bm | Kill

write-host "close mstsc task" -ForegroundColor green
Get-Process mstsc | Kill

write-host "delete rdp credentials" -ForegroundColor green
cmdkey /delete $servername

Dieses Skript habe ich als geplanten Task um 7:45 Uhr eingerichtet um sicher zu gehen, dass um 8:00 Uhr mit Sicherheit die Emails rausgeschickt werden.

Aufruf des geplanten Tasks:

powershell.exe -noprofile -command C:\birthdaymailer.ps1

 

Link zum Birthdaymailer-Forum


Wenn dir dieser Artikel gefallen hat, kannst du ihn mit einem Klick auf die folgenden Buttons weiterempfehlen. Möchtest du in Zukunft keine neuen Beiträge mehr verpassen? Dann abonniere doch den RSS Feed dieses Blogs. Vielen Dank!

Kommentar abgeben

Current month ye@r day *