Exchange Online Auslesen der Standard-Kalenderberechtigung

The estimated reading time 5 minutes

Immer wieder erreicht mich die Anfrage von Kunden, die sich mit der Standardfreigabe innerhalb der Exchange-Organisation beschäftigen und dafür auch keine vernünftige Lösung haben. Deshalb habe ich mich hingesetzt und ein kleines PowerShell Script dazu geschrieben, welches zunächst die Standardberechtigungen von allen Benutzerpostfächern auslesen kann.
Mit Standardberechtigungen sind in diesem Fall die Berechtigungen gemeint, welche jeder initial schon hat; Default ist hier „Availability Only“. Man sieht also standardmäßig nur Frei/Gebucht.

Aktuell kann dies auch nicht zentral bei Anlage von Konten gesteuert werden (außer man legt die Postfächer auch direkt per PowerShell an siehe hierzu ein Post).

Mit dem folgenden Script kann für alle aktiven Postfächer (keine Sharedmailbox oder Resscoucemailbox) die genannten Standardberechtigung auslesen und in eine CSV exportiert werden.

Hierbei sollte eine solche CSV-Datei entstehen. Um die Zuordnung leichter zu machen, wird hier Anzeigename und E-Mail Adresse mit ausgegeben:

Grünumrandet ist die Standardberechtgiung die auf dem Kalender des Postfaches liegt, rotumrandet ist eine detaillierte Auflistung zur Berechtigungsrolle.

Hier noch ein kleines Tutorial zu Exchange Online PowerShell.

Im Script muss der Pfad ($outputpath)für die CSV Ausgabe angepasst werden, und eben eine Verbindung zu Exchange Online PowerShell bereits hergestellt sein.

HINWEIS: es wurde eine Sprachabfrage eingebaut, da die Kalender Ordner im deutschen „Kalender“ heißen und im Englischen eben „Calendar“.
Weitere Sprachen sind hier nicht berücksichtig, lassen sich aber jeder Zeit in die Switch Case Funktion einbauen (Zeile 24.)

PowerShell Code Exchange-calendar-default-permission

### connect to Exchange Online!!!
#Connect-ExchangeOnline


#set path for output
$outputpath = "C:\temp\2025-04-15-default-calendar-permissions.csv"
##### begin of the script
$alias = (get-mailbox -RecipientTypeDetails UserMailbox -ResultSize unlimited).alias | Sort-Object 
#defining csv format
"DisplayName;EMail;DefaultCalendarIdentity;DefaultAccessRight;PermissionDetails" | Out-File -FilePath "$outputpath" -Encoding utf8 -Force
#looping through mailboxes
foreach($user in $alias){
  #getting more user properties
  $userprops = get-user $user
  $displayname = ($userprops).DisplayName
  $email = ($userprops).WindowsEmailAddress
  #show status in powershell output
  Write-Host "Checking $displayname,$email" -ForegroundColor Yellow
  #check language 
  $language = (Get-MailboxRegionalConfiguration $user).language.name
  switch($language){            
        de-DE {$ident = "$user" + ":\Kalender"}            
        en-US {$ident = "$user" + ":\Calendar"}            
        Default {$ident = "$user" + ":\Calendar"}            
    }            
  #getting permissions
  $calendardefaultperms = Get-MailboxFolderPermission -Identity "$ident" | Where-Object{$_.user -match "Default"}| Select-Object Identity,Foldername,User,AccessRights
  $calendarident = ($calendardefaultperms).Identity 
  $calendarperms = $calendardefaultperms.AccessRights
  #list detailed permission for roles
  switch($calendarperms){            
            
        Author {{$permsdetails ="CreateItems, DeleteOwnedItems, EditOwnedItems, FolderVisible, ReadItems"}}            
        Contributor {$permsdetails ="CreateItems, FolderVisible"} 
        Editor {$permsdetails ="CreateItems, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderVisible, ReadItems"}   
        NonEditingAuthor {$permsdetails ="CreateItems, DeleteOwnedItems, FolderVisible, ReadItems"}
        Owner {$permsdetails ="CreateItems, CreateSubfolders, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderContact, FolderOwner, FolderVisible, ReadItems"}  
        PublishingAuthor {$permsdetails ="CreateItems, CreateSubfolders, DeleteOwnedItems, EditOwnedItems, FolderVisible, ReadItems"}               
        PublishingEditor {$permsdetails ="CreateItems, CreateSubfolders, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderVisible, ReadItems"}
        Reviewer {$permsdetails ="FolderVisible, ReadItems"}
        AvailabilityOnly {$permsdetails ="View only availability data"}
        LimitedDetails {$permsdetails ="View availability data with subject and location"}    
        Default {$permsdetails ="individual permissions no role set"}            
        
    }
  #summarize information for csv export        
  "$displayname;$email;$calendarident;$calendarperms;$permsdetails" | Out-File -FilePath "$outputpath" -Encoding utf8 -Append
  ###change default permissions for ALL mailboxes, be careful!
  #set-MailboxFolderPermission -Identity "$iden" -User Default -AccessRights Reviewer
  }

Mit diesem Script ist es aber auch möglich alle Postfächer auf einen „Standard“ anzupassen (natürlich nur Bestehende, zukünftige müssten ebenfalls mit diesem Script nachgearbeitet werden).

Um die Standardberechtigung anzupassen muss Zeile 50 die Kommentierung aufgehoben werden, also anstatt „#set-MailboxFolderPermission -Identity „$ident“ -User Default -AccessRights Reviewer“ nur „set-MailboxFolderPermission -Identity „$ident“ -User Default -AccessRights Reviewer“

Das komplette Script sieht dann folgendermaßen aus.
HINWEIS: das Script ändert die Berechtigung auf allen Postfächern auf die im Script definierte Berechtigung, siehe hierzu auch Berechtigungsrollen.

### connect to Exchange Online!!!
#Connect-ExchangeOnline


#set path for output
$outputpath = "C:\temp\2025-04-15-default-calendar-permissions.csv"
##### begin of the script
$alias = (get-mailbox -RecipientTypeDetails UserMailbox -ResultSize unlimited).alias | Sort-Object 
#defining csv format
"DisplayName;EMail;DefaultCalendarIdentity;DefaultAccessRight;PermissionDetails" | Out-File -FilePath "$outputpath" -Encoding utf8 -Force
#looping through mailboxes
foreach($user in $alias){
  #getting more user properties
  $userprops = get-user $user
  $displayname = ($userprops).DisplayName
  $email = ($userprops).WindowsEmailAddress
  #show status in powershell output
  Write-Host "Checking $displayname,$email" -ForegroundColor Yellow
  #check language 
  $language = (Get-MailboxRegionalConfiguration $user).language.name
  switch($language){            
        de-DE {$ident = "$user" + ":\Kalender"}            
        en-US {$ident = "$user" + ":\Calendar"}            
        Default {$ident = "$user" + ":\Calendar"}            
    }            
  #getting permissions
  $calendardefaultperms = Get-MailboxFolderPermission -Identity "$ident" | Where-Object{$_.user -match "Default"}| Select-Object Identity,Foldername,User,AccessRights
  $calendarident = ($calendardefaultperms).Identity 
  $calendarperms = $calendardefaultperms.AccessRights
  #list detailed permission for roles
  switch($calendarperms){            
            
        Author {{$permsdetails ="CreateItems, DeleteOwnedItems, EditOwnedItems, FolderVisible, ReadItems"}}            
        Contributor {$permsdetails ="CreateItems, FolderVisible"} 
        Editor {$permsdetails ="CreateItems, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderVisible, ReadItems"}   
        NonEditingAuthor {$permsdetails ="CreateItems, DeleteOwnedItems, FolderVisible, ReadItems"}
        Owner {$permsdetails ="CreateItems, CreateSubfolders, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderContact, FolderOwner, FolderVisible, ReadItems"}  
        PublishingAuthor {$permsdetails ="CreateItems, CreateSubfolders, DeleteOwnedItems, EditOwnedItems, FolderVisible, ReadItems"}               
        PublishingEditor {$permsdetails ="CreateItems, CreateSubfolders, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderVisible, ReadItems"}
        Reviewer {$permsdetails ="FolderVisible, ReadItems"}
        AvailabilityOnly {$permsdetails ="View only availability data"}
        LimitedDetails {$permsdetails ="View availability data with subject and location"}    
        Default {$permsdetails ="individual permissions no role set"}            
        
    }
  #summarize information for csv export        
  "$displayname;$email;$calendarident;$calendarperms;$permsdetails" | Out-File -FilePath "$outputpath" -Encoding utf8 -Append
  ###change default permissions for ALL mailboxes, be careful!
  set-MailboxFolderPermission -Identity "$ident" -User Default -AccessRights LimitedDetails
  }

Ich hoffe ich konnte etwas Licht ins Dunkel von Standardberechtigungen innerhalb der Exchange Kalender bringen. Sollte euch der Artikel gefallen haben drückt gerne auf „Helpful“. Bei Fragen und Anregungen gerne die Kommentarfunktion verwenden.

Was this article helpful?
YesNo
0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments