Seite 1 von 1

Re: Birthdaymailer im Hintergrund laufen lassen

Verfasst: 04.09.2013, 11:17
von mirko
Schöne Sache, wenn das so funktioniert, auch wenn es so eigentlich nicht gedacht ist.;-)

Unbedingt beachten unter Windows Server 2008 R2 MUSS die 64bit Version verwendet werden, die 32bit macht Probleme, gibt es einen Fehler in der Windows DLL RpcRtRemote.dll, ist aber nicht erkennbar warum das so ist.

Birthdaymailer im Hintergrund laufen lassen

Verfasst: 04.09.2013, 09:52
von Che007
Hallo zusammen,

leider gibt es keine "Dienstunterstützung" für den Birthdaymailer und mit dem Programm RunAsSvc scheint der Birthdaymailer auch nicht zuverlässig zu funktionieren. Deshalb habe ich ein Skript geschrieben, der den Start vor dem Email Versand initiiert.

Zum Hintergrund:
Bei uns läuft der Birthdaymailer auf einem Windows Server 2008 R2. Ein lokaler Benutzer "birthdaymailer" wurde eingerichtet.

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.

Das Skript meldet den Benutzer per RDP an den Server an. Bei der Anmeldung wird, wie bereits erwähnt, automatisch der Prozess bmstart.exe geladen. Wenn das Hauptprogramm noch offen ist, wird dies automatisch geschlossen und der Benutzer wird vom Server getrennt (nicht abgemeldet).

Es handelt sich um ein Powershell Skript und sieht so aus:

Code: Alles auswählen

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

Function Open-RDPSession($Server,$User,$Password)
{
    Write-Host "- saving RDP credential" -ForegroundColor green
    cmdkey /SPAMWORT:$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
In meinen Blog findet ihr den Code auch mit Syntaxhighlighting: http://codingstube.de/2013/09/rdp-sitzu ... n-trennen/

Das Skript wird dann unter den Admin Credentials über die geplante Task ca. 15 Minuten vor dem Emailversand gestartet.

Zurzeit läuft das Skript noch in einer Testphase, aber ich bin optimistisch :)
Ich hoffe, dass ich hiermit dem ein oder anderen helfen kann.