Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Exchange - Nutzung der Cmdlet Extension Agents (Scripte automatisch bei Ereignissen ausführen lassen, ab Exchange 2010)

Anleitung Microsoft Exchange Server

Mitglied: colinardo

colinardo (Level 5) - Jetzt verbinden

07.03.2014, aktualisiert 07.05.2014, 21243 Aufrufe, 11 Kommentare, 2 Danke

Einleitung

Viele von euch kennen vermutlich folgende Situation:
Wir müssen z.B. bei neu angelegten Mailboxen im Exchange bestimmte Berechtigungen setzen oder das ein oder andere Feature in der Mailbox deaktivieren, und und und. Dies lässt sich nun auf der einen Seite mit Scripten realisieren die wir dann aber ausschließlich für das Erstellen von Mailboxen benutzen können, da ansonsten eine Anlage über die EMC nachträgliche Arbeiten erfordern würde.

Eine interessante Alternative dazu ist ein Feature, dass viele aber nicht kennen, und ab Exchange Server 2010 verfügbar ist: Die Cmdlet Extension Agents springen bei bei jedem Aufruf eines Powershell-CMDLets (z.B. "new-mailbox" / "remove-mailbox" etc.) in die Bresche und können automatisch Scripte aufrufen welche die zusätzlich nötigen Aufgaben im Hintergrund erledigen. Die Admins können dann also die gewohnten Tools wie die EMC und EMS zur Useranlage nutzen, und im Hintergrund wird dann der Rest automatisch vorgenommen.

Wie man die Cmdlet Extension Agents aktiviert und wie man sie nutzt, erfahrt Ihr in dieser Anleitung.

1. Erstellen der Konfigurationsdatei

Wir erstellen folgende Konfigurationsdatei mit dem Namen ScriptingAgentConfig.xml. Dieser Name darf nicht verändert werden !
<?xml version="1.0" encoding="utf-8" ?> 
<Configuration version="1.0"> 
 <Feature Name="MeineMailboxAktionen" Cmdlets="new-mailbox"> 
  <ApiCall Name="OnComplete"> 
   if($succeeded)    { 
    $newmailbox = $provisioningHandler.UserSpecifiedParameters["Name"] 
    set-casmailbox $newmailbox -ImapEnabled $false 
  </ApiCall> 
 </Feature> 
</Configuration>
Die XML-Datei legen wir dann in folgendem Exchange-Ordner ab:
C:\Program Files\Microsoft\Exchange Server\V14\Bin\CmdletExtensionAgents\
Dort befindet sich auch eine Beispiel-Konfigurationsdatei anhand derer man die weiteren Möglichkeiten abschauen kann.

Was macht die Konfigurationsdatei nun genau ?

Betrachten wir die folgende Zeile: <Feature Name="MeineMailboxAktionen" Cmdlets="new-mailbox">. Der Parameter "Cmdlets" gibt an welche Cmdlets unsere benutzerdefinierte Aktion auslösen. In diesem Fall, wenn eine neue Mailbox angelegt wird. Hier können wir auch mehrere CMDlets definieren, indem wir sie mit einem Komma voneinander trennen. Den Name-Parameter können wir frei wählen. In der XML-Datei können auch mehrere solcher Feature-Abschnitte für unterschiedliche CMDLets angelegt werden.

Die nächste Zeile <ApiCall Name="OnComplete"> legt fest wann unsere benutzerdefinierte Aktion ausgelöst wird. Im Beispiel ist es das OnComplete-Event welches ausgelöst wird, sobald der Befehl beendet wurde. Hier können wir auch das Validate-Event benutzen welches noch vor dem Eigentlichen CMDLet-Befehl ausgelöst wird. Dies kann z.B. dazu genutzt werden um eine Mailbox bevor sie entfernt wird, noch vorher via "New-MailboxExportRequest" als PST-Datei zu sichern.

Im obigen Beispiel wird bei jeder Neuanlage einer Mailbox, in dieser das IMAP-Feature deaktiviert. Um den Namen der betroffenen Mailbox zu erhalten, wird diese Zeile genutzt:
$newmailbox = $provisioningHandler.UserSpecifiedParameters["Name"]
Hier kann man auch auf alle an das CMD-Let übergebenen Parameter zugreifen und entsprechend reagieren.

2. Aktivieren der Cmdlet Extension Agents

Um die Agents zu aktivieren müssen wir noch folgenden Befehl in einer Exchange Management Shell absetzen:
Enable-CmdletExtensionAgent "Scripting Agent"
Wenn man nun in der EMC oder der EMS eine neue Mailbox angelegt (diese nutzen im Hintergrund auch die Powershell-CMDLets), wird in dieser Mailbox automatisch das IMAP-Feature deaktiviert. Praktisch oder !?

3. Nutzung von externen Scripten

Natürlich kann man in der obigen XML-Datei auch ein externes Script aufrufen das die entsprechenden Befehle enthält, und Ihm mit einem Parameter das entsprechend betroffene Objekt mit übergeben.
c:\scripts\new-mailbox-script.ps1 -name $newmailbox
Ein kleiner Nachteil ist, das bei der Nutzung von mehreren Exchange-Servern die XML-Datei auf alle Server verteilt werden muss.

Aber im Großen und Ganzen ein sehr nützliches Feature, das es wert ist mal erwähnt zu werden

Grüße @colinardo
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Mitglied: Belloci
16.04.2014, aktualisiert um 13:10 Uhr
Hallo @colinardo,

danke für den super Beitrag. Ich habe mich mal an die Sache gewagt und zwar so wie du es in deiner Anleitung beschrieben hattest. Selbstverständlich habe ich das auf meine Bedürfnisse (OWA & ActiveSync disablen) angepasst.

Meine XML sah dann so aus:

01.
<?xml version="1.0" encoding="utf-8" ?>  
02.
 
03.
<Configuration version="1.0">  
04.
 
05.
 <Feature Name="OWAActiveSyncOff" Cmdlets="new-mailbox">  
06.
 
07.
  <ApiCall Name="OnComplete">  
08.
 
09.
   if($succeeded)    {  
10.
 
11.
    $newmailbox = $provisioningHandler.UserSpecifiedParameters["Name"]  
12.
 
13.
    set-casmailbox $newmailbox -OWAEnabled $false  
14.
    set-casmailbox $newmailbox -ActiveSyncEnabled $false  
15.
 
16.
   }  
17.
 
18.
  </ApiCall>  
19.
 
20.
 </Feature>  
21.
 
22.
</Configuration>
Ich habe das so verstanden, dass im Featurename alles drin stehen darf, daher irrelevant. Dann habe ich im nächsten step die XML OWAActiveSyncOff.xml benannt und Enable-CmdletExtensionAgent "Scripting Agent" - das gab eine dicke Fehlermeldung nachdem ich die EMC gestartet habe . Also schwupps, die Datei in ScriptingAgentConfig.xml umbenannt und schon war die böse Meldung weg. Problem: Nach Neuanlage eines Postfachs waren sowohl ActiveSync als auch OWA enabled...

Ich gehe mal davon aus, dass meine XML falsch ist, kannst du das bestätigen?! Danke dir im Voraus für deine Mühe!

Gruß
B
Bitte warten ..
Mitglied: colinardo
16.04.2014, aktualisiert um 13:35 Uhr
Hallo Belloci,
kann ich nicht bestätigen, hier geht es problemlos, prüfe mal ob der "Scripting Agent" überhaupt auf deinem System exisitiert:
Get-CmdletExtensionAgent | %{$_.Name}
Wenn er vorhanden ist, könntest du mal schrittweise die Priorität des Agents erhöhen (0 ist die dabei die höchste Priorität):
Set-CmdletExtensionAgent "Scripting Agent" -Priority 3
Standardmäßig steht diese auf 6. Wenn nämlich ein anderer Agent nach dem Scripting Agent die selbe Eigenschaft verändert, greift dein Script natürlich nicht weil die Eigenschaft durch den anderen Agent überschrieben wird.

Grüße Uwe
Bitte warten ..
Mitglied: Belloci
16.04.2014 um 14:05 Uhr
Hi Colinardo,

Ersteres geprüft, war vorhanden und wurde demnach angezeigt. Prioriät habe ich dann auf 3 erhöht und ein neues Postfach angelegt - leider kein Erfolg. Sehr komisch. In meiner Konstellation habe ich 2 Exchange Server - auf beiden die XML abgelegt... Kann mir auch nicht vorstellen, dass ein anderer Agent dieses überschreibt...

Gruß
Belloci
Bitte warten ..
Mitglied: colinardo
16.04.2014, aktualisiert um 14:16 Uhr
Zitat von Belloci:
Ersteres geprüft, war vorhanden und wurde demnach angezeigt. Prioriät habe ich dann auf 3 erhöht und ein neues
Postfach angelegt - leider kein Erfolg. Sehr komisch. In meiner Konstellation habe ich 2 Exchange Server - auf beiden die XML
abgelegt... Kann mir auch nicht vorstellen, dass ein anderer Agent dieses überschreibt...
In dieser Konstellation musst du natürlich auch auf beiden Servern den Agent aktivieren.
Und erhöhe die Priorität auch mal bis auf 0.

Dann teste doch erst mal ob der Agent überhaupt ausgeführt wird.
dazu kannst du auch mal einfach nur folgenden Powershell-Command in die XML-Datei schreiben:
01.
if($succeeded){  
02.
    echo "Test, hat funktioniert" | out-file C:\test.txt 
03.
} 
und dann checken ob die Datei nach dem Erzeugen der Mailbox vorhanden ist.

Grüße Uwe
Bitte warten ..
Mitglied: Belloci
16.04.2014, aktualisiert um 14:18 Uhr
Da scheint der Hase begraben zu sein... Kein Output File...

Habe nach der Einrichtung des Agenten keinen Neustart gemacht, eventuell ist der von Nöten?
Bitte warten ..
Mitglied: colinardo
16.04.2014, aktualisiert um 14:30 Uhr
Poste mal die Ausgabe von:
Get-CmdletExtensionAgent | ?{$_.Name -eq "Scripting Agent"}
Habe nach der Einrichtung des Agenten keinen Neustart gemacht, eventuell ist der von Nöten?
normalerweise nicht, kann aber nicht schaden.

Welches Servicepack hat der Exchange ?

Zitat von http://technet.microsoft.com/de-DE/library/dd297951%28v=exchg.141%29.as ...
Der Agent wird auch nicht auf Exchange-Servern ausgeführt, auf denen die Edge-Transport-Serverrolle ausgeführt wird, da diese Serverrolle keine Cmdlet-Erweiterungs-Agents unterstützt. 
Bitte warten ..
Mitglied: Belloci
16.04.2014, aktualisiert um 14:49 Uhr
Hi,

hier die Ausgabe:

01.
 
02.
RunspaceId        : 3e2d5bd7-dfcd-... 
03.
Assembly          : Microsoft.Exchange.ProvisioningAgent.dll 
04.
ClassFactory      : Microsoft.Exchange.ProvisioningAgent.ScriptingAgentClassFactory 
05.
Enabled           : True 
06.
Priority          : 1 
07.
IsSystem          : False 
08.
AdminDisplayName  :  
09.
ExchangeVersion   : 4.0 (14.1.166.0) 
10.
Name              : Scripting Agent 
11.
DistinguishedName : CN=Scripting Agent,CN=CmdletExtensionAgent Settings,CN=Global Settings,CN=ABCD,CN=Mic 
12.
                    rosoft Exchange,CN=Services,CN=Configuration,DC=xxx,DC=local 
13.
Identity          : Scripting Agent 
14.
Guid              : 941284d0-4731-4e0c.... 
15.
ObjectCategory    : xxx.local/Configuration/Schema/ms-Exch-Cmdlet-Extension-Agent 
16.
ObjectClass       : {top, configuration, msExchCmdletExtensionAgent} 
17.
WhenChanged       : 16.04.2014 14:06:24 
18.
WhenCreated       : 01.12.2011 16:50:53 
19.
WhenChangedUTC    : 16.04.2014 12:06:24 
20.
WhenCreatedUTC    : 01.12.2011 15:50:53 
21.
OrganizationId    :  
22.
OriginatingServer : xxx.local 
23.
IsValid           : True
Exchange hat den aktuellen Patchstand!
Bitte warten ..
Mitglied: colinardo
16.04.2014, aktualisiert um 15:02 Uhr
Hat einer dein Server die Edge-Transport-Rolle installiert ?
Get-ExchangeServer | select ServerRole
wenn ja dann laufen die Agents dort nicht s. letzter Kommentar.

Ansonsten bin ich jetzt mit meinem Latein bei dir am Ende. Entweder machst du irgendwas falsch das ich hier nicht sehe, oder etwas stimmt an deinem System nicht ganz.
Bitte warten ..
Mitglied: Belloci
16.04.2014 um 15:04 Uhr
Hey,

also habe ich gerade schon überpfüft, leider negativ also EDGE-Transport ist nicht installiert.

Ich werde die Systeme mal neu starten und danach erneut probieren - halte die Geschichte hier auf den neusten Stand!

Gruß
B

Und danke für deine Unterstützung!
Bitte warten ..
Mitglied: Belloci
16.04.2014 um 20:26 Uhr
Guten Abend nochmal!

Habe jetzt die ganzen Einstellungen erneut geprüft und einen Neustart gemacht, leider ohne Erfolg - dies nur zur Info.

Schönen Abend und Gruß
Belloci
Bitte warten ..
Mitglied: colinardo
16.04.2014, aktualisiert um 22:12 Uhr
dann Check nochmal alle Logs, normal ist das auf jeden Fall nicht, da es hier auf mindestens 10 Servern ohne Probleme läuft. Vielleicht läuft irgendein Dienst bei dir nicht. Hmm, da werde ich nochmal genauer Hinschauen und die Abhängigkeiten mal checken.

Überprüfe auch ob die Powershell Execution Policy auf dem Server das Ausführen von Scripts erlaubt.
Set-ExecutionPolicy RemoteSigned
Ebenso schönen Abend
Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Powershell: Fritz!Box Telnet-Befehle ausführen lassen
Tipp von colinardoBatch & Shell

Für alle die es brauchen können und keine externen Tools außer nativer Powershell verwenden möchten, hier eine Funktion die ...

Outlook & Mail
Outlook 2007 zu 2010 und zurück unter Exchange 2010
Anleitung von TechnoXOutlook & Mail4 Kommentare

Wir haben hier ein immer mal wieder auftretendes Szenario. Wir haben mehrere Outlook Versionen im Einsatz. Vorwiegend 2007 & ...

Outlook & Mail
Outlook 2016 - Exchange 2010 Verbindungsprobleme
Tipp von 0l1v3rOutlook & Mail1 Kommentar

Ab Outllook 2016 funktionierte die Kommunikation zwischen den Windows Fat-Clients und dem Exchange 2010 nicht mehr. Beim Einrichten von ...

Exchange Server
Mittels Batch-Script Exchange-Logs sammeln und archivieren
Anleitung von beidermachtvongreyscullExchange Server

Ich möchte hier eine recht einfache Lösung für ein Log-Archiving vorstellen. Jeder kennt das Problem, dass die meisten Dienste ...

Neue Wissensbeiträge
MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 11 StundenMikroTik RouterOS4 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 11 StundenSicherheit

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 13 StundenAdministrator.de Feedback9 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin vor 18 StundenVmware

Die VMware-Anwendungen zum Umgang mit virtuellen Maschinen Fusion, Horizon Client und Workstation sowie die Plattform NSX sind verwundbar. Davon ...

Heiß diskutierte Inhalte
Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail
Frage von ahstaxVisual Studio24 Kommentare

Hallo, ich möchte gerne ein vb.net-Tool schreiben, das am Ende eine Outlook-E-Mail erzeugt. Grundsätzlich ist mir klar, wie das ...

Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server16 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...