Hallo Exchange-Freunde,
aufgrund der Anfrage eines Lesers melde ich mich heute mit einer spannenden Konfiguration. Ziel ist es, dem neuen Postfachbenutzer eine automatisierte Willkommensnachricht zukommen zu lassen.
Möglich macht das der „Scripting Agent“ – standardmäßig deaktiviert -, der nach erfolgreichem Anlegen eines Postfaches Aufgaben übernehmen kann. Ich starte zunächst mit einer Übersicht der Konfigurationsschritte:
- HTML-Vorlage erstellen
- Empfangsconnector prüfen
- Konfigurationsdatei (XML) anpassen
- „Scripting Agent“ aktivieren
- Benutzerpostfach erstellen
Scripting Agent
Schritt 1 – HTML-Vorlage erstellen
Bevor eine Willkommensnachricht an den Benutzer geht, muss diese zunächst mit Outlook erstellt werden. Sie wird dann im HTML-Format in einer Freigabe bereitgestellt.
- Outlook starten
- Neue Nachricht
- Text / Bilder hinzufügen
- als HTML in einer Freigabe speichern –> \\dc1\transfer\willkommen.htm
Schritt 2 – Empfangsconnector prüfen
Damit der Scripting Agent die Willkommensnachricht auch wirklich versenden kann, muss geprüft werden, ob der anonymisierte Nachrichtenversand vom Exchange-Server funktioniert. Dazu nutze ich sofort meine neue Willkommensnachricht!
- Am Exchange Server anmelden
- PowerShell öffnen, um den Mailversand zu testen
$emailbody = [String] (Get-Content ("\\dc1\Transfer\wilkommen.htm")) $emailbody = $emailbody -Replace "Benutzername", "Andres Sichel" Send-MailMessage -From administrator@sichel-it.de -To andi@sichel-it.de -SMTPserver app2.sichel.loc -Subject "Herzlich Willkommen" -Body $emailbody -BodyAsHTML
- Klappt der Versand, ist es okay, andernfalls…
- …Empfangskonfiguration prüfen – und ggf. einen Empfangsconnector anlegen. Ich habe einen, der es allen Servern erlaubt, Mails intern zuzustellen.
Schritt 3 – Konfigurationsdatei (XML) anpassen
Bevor der Scripting Agent aktiviert wird, sollte die Konfigurationsdatei angepasst werden. Die Konfigurationsdatei liegt im Exchange Installationsverzeichnis: „\Bin\CmdletExtensionAgents\ScriptingAgentConfig.XML.“ Ist die Datei nicht vorhanden, kann einfach eine mit folgendem Inhalt erstellt werden:
<?xml version="1.0" encoding="utf-8" ?> <Configuration version="1.0"> </Configuration>
Dadurch passiert zunächst gar nichts, es sind nur alle Vorbereitungen getroffen ;)
Nun möchte ich hinterlegen, dass nach dem „New-Mailbox“-Befehl eine E-Mail erzeugt wird, dazu setze ich in das „Configuration-Tag“ Folgendes ein:
<Feature Name="Welcome E-Mail" Cmdlets="New-Mailbox,Enable-Mailbox"> <ApiCall Name="OnComplete"> If($succeeded) { start-sleep -s 20 $Mailbox = $provisioningHandler.UserSpecifiedParameters["Name"] Set-CASMailbox $Mailbox -ImapEnabled $false -POPEnabled $false $Name = (Get-Mailbox $Mailbox).Name $email = (Get-Mailbox $Mailbox).PrimarySMTPAddress.ToString() $emailbody = [String] (Get-Content ("\\dc1\Transfer\willkommen.htm")) $emailbody = $emailbody -Replace "Benutzername", $Name Send-MailMessage -From willkommen@sichel-it.de -To $email -SMTPserver 10.0.0.2 -Subject "Herzlich Willkommen" -Body $emailbody -BodyAsHTML -Encoding ([System.Text.Encoding]::UTF8) if ($Mailbox) { Remove-Variable Mailbox } if ($DisplayName) { Remove-Variable DisplayName } if ($email) { Remove-Variable email } if ($emailbody) { Remove-Variable emailbody } } </ApiCall> </Feature>
Ach ja, ich deaktiviere nebenbei auch noch POP & IMAP ;)
Die vollständige Datei gibt es hier –> ScriptingAgentConfig.xml
Schritt 4 – Scripting Agent aktivieren
Da nun alle Vorbereitungen getätigt sind, kann der Scripting Agent aktiviert werden.
- Am Exchange Server anmelden
- Exchange Management Shell öffnen
Enable-CmdletExtensionAgent "Scripting Agent"
- Fertig
Schritt 5 – Benutzerpostfach
Nachdem nun der Scripting Agent aktiviert und die XML-Datei erstellt ist, kann ich das Postfach anlegen. Dabei wird die Willkommensnachricht versendet:
Das war’s auch schon ;)
Kleiner Hinweis: Ich habe diesen Beitrag auf Exchange 2010 erstellt, da ich diese Umgebung gerade für einen anderen Test aufgebaut habe, sonst bleibe ich bei Exchange 2016 :)
Viele Grüße aus Bielefeld!
Andi
Hallo Andi,
kann man ein Skript auch so anpassen, dass die Mail nur versendet wird, wenn ein Postfach in speziellen Datenbanken erstellt wird? Wir haben bei uns 2 Mandanten am System. Der eine Mandant hat 2 Datenbanken, wo die Mail nicht ankommen soll und der andere Mandant hat 60 Datenbanken, wo die Mail ankommen soll.
Lässt sich das bewerkstelligen??
Hi,
ich bekomme leider eine Fehlermeldung bei beim anlegen des Postfachs. Zuvar hatte ich ganz normal einen Testuser im AD angelegt und eine Email Adressen hinzugefügt. Wenn ich den Empfänger bei Exchange 2016 hinzufügen möchte, bekomme ich folgende Fehlermeldung:
„Der Cmdlet-Erweiterungs-Agent mit dem Index 5 hat eine Ausnahme in ‚OnComplete()‘ ausgelöst: Microsoft.Exchange.Provisioning.ProvisioningException: ScriptingAgent: Beim Aufrufen des Scriptlets für die OnComplete-API wurde eine Ausnahme ausgelöst: Es muss ein Empfänger angegeben werden.. —> System.InvalidOperationException: Es muss ein Empfänger angegeben werden. bei System.Net.Mail.SmtpClient.Send(MailMessage message) bei Microsoft.PowerShell.Commands.SendMailMessage.EndProcessing() — Ende der internen Ausnahmestapelüberwachung — bei Microsoft.Exchange.ProvisioningAgent.ScriptingAgentHandler.OnComplete(Boolean succeeded, Exception e) bei Microsoft.Exchange.Provisioning.ProvisioningLayer.OnCompleteImpl(Task task, Boolean succeeded, Exception exception)“
In der ScriptingAgentConfig.xml habe ich eigentlich nur den Abesender, SMTP Server und den UNC Pfad für die Mailvorlage angepasst.
Hättest Du einen Tipp?
Besten Dank
Hey,
welchen Exchange Server mit welcher .Net Version auf welchem Betriebssystem setzt Du ein?
Andi
Hi,
Exchange 2016 CU2 auf Win2012R2 mit .net 4.6.1
Hallo Andi,
hast Du evtl. noch einen Tipp für mich, wegen der Fehlermeldung?
Besten Dank
Ich habe über den Weg auch schon meine Erfahrungen gesammelt und lass mich raten: Kleine Umgebung mit einer AD-Site oder gar nur einem DC. Dann geht es schnell das ein Enable-Mailbox/New-Mailbox (für Office 365 solltest du noch New-remoteMailbox vorsehen) die Felder im AD schreibt und die Exchange Dienste das mitbekommen. Das Deaktivieren von POP3 ist ein gutes Beispiel, wenn man da sicherstellt, dass der gleiche DC genutzt wurde.
Ansonsten würde ich die Willkommensmail erst senden lassen, wenn das Postfach wirklich „angelegt“ ist und das kann je nach AD-Replikation auch einige Minuten dauern. In Office 365 hast du keinen Skripting Agent. Insofern sollte man besser den Gesamtprozess „Provisioning“ strukturiert angehen und da am Ende dann eine Sammelmail senden mit den Infos zu Exchange, aber auch Skype, SharePoint, VPN-Zugang, RDP Zugang und was noch alles für den Anwender interessant ist.
Daher würde ich eher mir über ein Provisioning System oder ein „User anlegen-Skript“ Gedanken zu machen, die eben auch eine Mailbox anlegen. Das POP3-deaktivieren ist aber ein sehr gutes Beispiel für so eine Erweiterung
Dennoch sehr schön geschrieben und wert von http://www.msxfaq.de/code/cmdletextensionagent.htm verlinkt zu werden :-)
Hey Frank, danke für dieses ausführlichen Kommentar! Klar, es ist ja nicht nur damit getan ein Postfach anzulegen! Und ja, kleine Org, 1 Site, 1 DC. Dennoch die Pause von 20 Sekunden.
Ich möchte halt gerne Aufzeigen was alles geht in Exchange ;) Einen gesamten Prozess der Benutzerbereitstellung abzubilden ist sehr komplex, und in jedem Unternehmen unterschiedlich vom Prozessablauf her. Ein Script welches das gesamte Umfasst wäre aber sehr gut:) – Da muss der AD-User Manager noch wachsen!
Danke für die Tipps, auch für meine Leser, sowie die Verlinkung :)
Andi