Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 20871 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...