CmdLetExtensionAgent (ab Exchange 2010)

Wer Exchange 2010 verwaltet sollte wissen, dass er nur noch Dirigent ist und alle Aktionen an die Exchange Server zur Ausführung übergeben werden. In der Regel ändert ein Administrator also nicht mehr Felder oder Werte direkt im Active Directory mit seinen Berechtigungen. Durch diese Teilung können auch Benutzer ohne erweiterte Rechte auf dem AD bestimmte Tätigkeiten durchführen (Delegierung von Rolle) und die Software auf dem Exchange Server kann natürlich eine Plausibilitätsprüfung durchführen, die Aktionen in ein Auditlog schreiben und andere Aufgaben erfüllen.

Beliebtes Beispiel ist der "New-Mailbox"-Prozess. Wenn Sie eine neue Mailbox z.B. mit dem Assistenten anlegen, dann ist danach POP3, IMAP4 schon aktiviert und bestimmte Vorgaben (z.B. Archiv, UM-Policy, etc.) sind nicht gesetzt. Leider können weder die Exchange 2007 noch 2001 MMC die Funktion, ein Template anzuwenden oder Einstellungen von einem bestehenden Postfach zu übernehmen. Also müssen Sie immer noch "Nacharbeiten". Genau das geht über diese Extension Agents.

Funktionsweise

Die Agenten müssen natürlich auf allen Servern identisch gehalten werden, da ein Administrator in der Regel ja nicht steuert, mit welchem Exchange Server er sich zur Verwaltung verbindet. Die Agenten erweitern die Funktion, indem Sie bestehende CmdLets ergänzen. Die Ausführung erfolgt dabei nach Prioritäten (Reihenfolge)

Agenten im Lieferumfang

Microsoft nutzt selbst diese API, um auf dem Server verschiedene Funktionen umzusetzen. Über ein Get-CmdLetExtensionAgent können Sie selbst einfach ermitteln, welche Agenten gerade aktiv sind.

Get-CmdletExtensionAgent | ft name,enabled,priority -wrap -autosize

Bei meiner MusterVM sieht das dann wie folgt aus:

Diese Einstellungen sind organisationsweit und der entsprechende Code ist auf allen Exchange Servern vorhanden. Nun wissen Sie auch, wie das Auditing z.B. implementiert ist. Und wenn Sie den "Rus Agent" sehen, dann stimmt es doch nicht ganz, dass der RUS Tod ist. Die Funktion, nach der Anlage oder Änderung eines Benutzers die Daten entsprechend der Richtlinien auszurichten erledigt nun dieses CmdLet im gleichen Atemzug.

Eigenes Skript mit dem Scripting Agent

Microsoft liefert auch einen "Scripting Agent" mit, welcher aber per Default deaktiviert ist. Diesen können Sie selbst nutzen, um einfache Aufgaben in PowerShell umzusetzen.

Starten Sie Notepad und bearbeiten Sie einfach die Datei "ScriptingAgentConfig.XML" im Ordner "bin\CmdletExtensionAgents" unter dem Exchange Programmverzeichnis. Sollte die Datei noch nicht sein, dann legen Sie diese einfach neu an. Der Inhalt könnte sein:

<?xml version="1.0" encoding="utf-8" ?>
<Configuration version="1.0">
 <Feature Name="MailboxProvisioning" Cmdlets="new-mailbox">
  <ApiCall Name="OnComplete">
   if($succeeded)    {
    $mb = $provisioningHandler.UserSpecifiedParameters["Name"]
    set-casmailbox $mb -POP3Enabled $false
   }
  </ApiCall>
 </Feature>
</Configuration>

Sie weist den ScriptingAgent an, immer nach dem Abschluss (OnComplete) des Commandlets "New-Mailbox" die POP3-Funktion abzuschalten.

Diese Einstellung müssen Sie natürlich auf allen Exchange Servern gleich halten. Sie sehen aber auch schon, dass hier eigentlich nur PowerShell Befehle ausgeführt werden. Sie können hier natürlich auch einfach ein komplettes PowerShell Script ausführen.

Ehe das Skript aber aktiv wird, müssen Sie den Agent erst noch aktivieren:

# Einschalten des ScriptingAgents
Enable-CmdletExtensionAgent "Scripting Agent"

Das Aktivierung muss nur einmal pro Organisation gemacht werden. Lesen Sie dazu auch die Beschreibung bei Microsoft:

Grenzen des Agenten

Ehe Sie nun allzu viel Phantasie walten lassen, was so als Agent noch alles möglich sein könnte, sollten Sie durchaus noch einmal überlegen, wer und von wo diese Programme und Skripte ausgeführt werden.

  • Jeder Exchange Server ist Powershell Ziel
    Jeder Exchange Server kann das Ziel einer PowerShell sein. Sie müssen also schon dafür sorgen, dass die XML-Datei mit der Erweiterung auf wirklich JEDEM Exchange Server identisch vorhande nsid
  • Kein Agent in der CLoud
    Es gibt keinen CMD-Let Extension Agent in Office 365. Ihre "Lösung" wird sich also nur auf Konten On-Premises beziehen können oder solche die per ADSync die Einstellungen in die Cloud replizieren
  • AD-Replikation und Ziel DC
    Per Default nutzen Exchange Commandlets "einen nahen Domain Controller". Das muss nicht immer der gleiche DC sein und damit kommt die DC-Replikation wieder ins Spiel. Ein Enable-Mailbox aktiviert einen Benutzerpostfach und der nächste Schritt nutzt dummerweise einen anderen DC, auf dem der gerade aktivierte Benutzer noch nicht aktiviert ist. Entweder Sie "warten" oder nutzen immer den gleichen DC.
  • Laufzeit
    Jeder Befehl mehr kostet etwas Zeit. Sicher kann man sagen, dass ein POP3-Abschalten nach einem Enable-Mailbox sehr sinnvoll ist aber Einstellungen die sich auf Bereiche ausserhalb von Exchange beziehen machen aus meiner Sicht keinen Sinn.
  • Debugging
    Zuerst müssen Sie natürlich den Server suchen, auf dem ihr Befehl ausgeführt wurde und dann hoffen, dass Sie im Eventlog o.ä, einen Hinweis finden. Oder sie erweitern den Agenten noch um Debug-Ausgaben. Ich kann mir das sehr unschön vorstellen, denn es ist immer noch eine XML-Datei und so sind z.B: Zeichen wie <> verboten.
  • Trigger/Compliance
    Zuletzt sollten Sie daran denken, dass die Commands nur in Verbindung mit den konfigurierten Exchange Commandelets ausgeführt werden. Viele Änderungen in einem Forest erfolgen aber auch über andere Progamme und Skripte. so dass nicht immer Exchange es "mitbekommt" und daher auch nicht darauf reagieren kann. Wenn z.B. ein Admin oder Helpdesk bei einem Benutzer doch wieder POP3 einschaltet oder jemand einen neuen Exchange Server installiert und das kopieren der XML vergessen hat, dann sind sie schon wieder "unstimig".

So schön die Funktion der CMDLet Extention Agents ist, so beschränkt ist auch der Einsatz. Wer hier Zeit investiert, sollte sich eher Gedanken über ein allgemeines "Provisioning" für sein Netzwerk machen. Denn ein Postfach Anlegen ist nur ein Punkt auf dem Laufzettel für neue Mitarbeiter.

Weitere Links