blog.icewolf.ch

Let's talk about IT!
posts - 1259, comments - 293, trackbacks - 0

My Links

Archives

Post Categories

icewolf

Set Outlook Calendar default permissions with Exchange Scripting Agent

Hallo zusammen,

Ich will nach dem erstellen der Mailbox automatisch die default Kalender Permission auf "Reviewer" setzen. Dazu habe ich den Scripting Agent verwendet:

Grundlagen:

Also erst mal die Grundlagen erarbeiten. Mit dem folgenden Befehl kann man die MAPI Kalender Berechtigungen anzeigen (Achtung der Kalender Ordner kann je nach Spracheinstellung anders heissen)

Get-MailboxFolderPermission boa:\Kalender

Mit dem folgenden Befehl kann ich die "Default Permission" auf "Reviewer" setzen

Set-MailboxFolderPermission boa:\Kalender -User default -AccessRights Reviewer
Get-MailboxFolderPermission boa:\Kalender

Nun schauen wir mal nach, ob der Scripting Agent aktiviert ist

Get-CmdletExtensionAgent | fl name, enabled

Mit den folgenden Befehlen kann man den "Scripting Agent" aktivieren oder deaktivieren

Enable-CmdletExtensionAgent "Scripting Agent"
Disable-CmdletExtensionAgent "Scripting Agent"
Get-CmdletExtensionAgent | fl name, enabled

Im folgenden Pfad C:\Program Files\Microsoft\Exchange Server\V14\Bin\CmdletExtensionAgents wird nach der Datei "ScriptingAgentConfig.xml" gesucht. Es ist bereits eine Sample Datei vorhanden, mit der man eine Automatisierung bauen kann.

Meine Automatisierung soll also nach dem erstellen der Mailbox mit "New-Mailbox" oder "Enable-Mailbox" die Permission auf dem Kalender setzen.

Hier das Script zum runterkopieren:

<?xml version="1.0" encoding="utf-8" ?>
<Configuration version="1.0">
<Feature Name="MailboxProvisioning" Cmdlets="new-mailbox,enable-mailbox">
<ApiCall Name="OnComplete">
 if($succeeded)
 {
  $newmailboxes = $provisioningHandler.UserSpecifiedParameters["Name"]

  $Mailboxes = Get-mailbox $newmailbox
  ForEach ($Mailbox in $Mailboxes)
  {
   $cal = Get-MailboxFolderStatistics -Identity $Mailbox.Alias | where {$_.foldertype -eq "Calendar"}
   $Calpath = $Mailbox.Alias + ":" + $cal.FolderPath.replace("/","\")
   Set-MailboxFolderPermission $calpath -User default -AccessRights Reviewer
  }
 }
</ApiCall>
</Feature>
</Configuration>

Achtung: Stimmt etwas nicht im XML File, kann man bereits beim starten der Exchange Management Konsole eine Fehlermeldung erhalten (Scripting Agent initialization failed)

Nun testen wir das Script mit "New-Mailbox"

Funktioniert wunderbar

Nun testen wir das Script mit "Enable-Mailbox". Da können ja auch mehrere Mailboxen gleichzeitig enabled werden.

Funktioniert ebenfalls

Grüsse
Andres Bohren

Print | posted on Tuesday, October 08, 2013 9:02 PM | Filed Under [ Exchange ]

Feedback

Gravatar

# re: Set Outlook Calendar default permissions with Exchange Scripting Agent

Hi,

kannst Du mir verraten aus welchem Grund Du das machst?
10/9/2013 11:58 AM | Andi
Gravatar

# re: Set Outlook Calendar default permissions with Exchange Scripting Agent

Hallo Andi,

Ich arbeite bei einem Unternehmen, welches mehrere Standorte in der Schweiz hat.
Es kanm eine Frage kam aus dem Business, ob es nicht möglich ist die Standardberechtigung so zu setzen, dass man auch sieht wo sich der Benutzer befindet.
Per Default sieht man nur ob jemand besetzt oder frei ist, aber ob jemand Beispielsweise in Zürich oder Genf ist, sieht man so nicht. Mit meinem Artikel habe ich aufgezeigt wie man das Problem technisch lösen könnte. Natürlich kann man auch organisatorische Anpassungen machen wie beispielsweise Reisezeiten müssen im Kalender auch gemacht werden oder Schulungen wie man Kalenderanfragen oder Kalenderfreigaben macht.

Grüsse
Andres
10/9/2013 8:30 PM | admin
Gravatar

# re: Set Outlook Calendar default permissions with Exchange Scripting Agent

Hallo,
unter Exchange 2013 scheint es wohl nicht mehr zu gehen. Der Ordner Kalender wird erst erstellt, wenn sich der Benutzer das erste Mal anmeldet. Wenn ich es richtig verstehe, läuft das Script aber bereits bei der Erstellung der Mailbox. Gibt es eine Möglichkeit auch hier eine Automatisierung zu erreichen? Ansonsten bleibt halt nur, regelmässig ein Powershell-Script laufen zu lassen und die Berechtigungen aller Mailboxen zu setzen oder fällt dir eine bessere Möglichkeit ein? Danke für dein Feedback.

Grüsse Matthias
10/2/2014 12:31 PM | MT
Gravatar

# re: Set Outlook Calendar default permissions with Exchange Scripting Agent

Hallo, lieber Matthias!

Hast du es geschafft, etwas derartiges in Exchange 2013 umzusetzen?
Würde dies auch mit anderen Berechtigungen innerhalb eines Postfachs funktionieren?

Viele Grüße
7/13/2016 4:35 PM | Marcel
Gravatar

# re: Set Outlook Calendar default permissions with Exchange Scripting Agent

Bezüglich Problem: unter Exchange 2013 scheint es wohl nicht mehr zu gehen. Der Ordner Kalender wird erst erstellt, wenn sich der Benutzer das erste Mal anmeldet.......

Das ist auch unter 2010 so.
Erstelle ich ein neues Postfach, dann sieht die PS mittels GET-MailboxFolderPermissions dieses Postfach nicht.
Erst wenn der User sich angemeldet hat (Auch unter owa)

Die Rechte sind aber korrekt gesetzt.

Gruss
Andreas
11/16/2016 2:17 PM | Andreas
Gravatar

# Unter Exchange 2013 lauft das generell nicht, oder ?

Hallo,

ich habe das Script unter Exchange 2013 hinterlegt. Wenn ich nun einen Testuser erstelle kommt die Meldung:

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: You cannot call a method on a null-valued expression.. ---> System.Management.Automation.RuntimeException: You cannot call a method on a null-valued expression. at CallSite.Target(Closure , CallSite , Object , String , String ) at System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2) at lambda_method(Closure , Object[] , StrongBox`1[] , InterpretedFrame ) --- End of inner exception stack trace --- at Microsoft.Exchange.ProvisioningAgent.ScriptingAgentHandler.OnComplete(Boolean succeeded, Exception e) at Microsoft.Exchange.Provisioning.ProvisioningLayer.OnCompleteImpl(Task task, Boolean succeeded, Exception exception)

Lauft das unter Exchange 2013 gar nicht ?

Gruss
Patrick
2/21/2017 8:53 AM | Patrick Maurer

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 1 and 7 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET