Unternehmesweite Termine in Anwenderkalender eintragen

Um unternehmensweite Termine bereitzustellen, gibt ganz unterschiedliche Wege. Oftmals wird heirzu gerne ein dedizierter Kalender mit Terminen bereitgestellt, der als zusätzlicher Kalender zur Terminplanung in Outlook eingeblendet werden kann.

In diesem Fall sahen die Anforderungen jedoch anders aus.

  • Die unternehmensweiten Termine, in diesem Fall “Betriebsruhe” an Brückentagen oder Betriebsferien, sollen unmittelbar in die persönlichen Kalender eingetragen werden
  • Termine sollen sowohl eingetragen, als gelöscht werden können

Der Grund für das direkte Eintragen der unternehmensweiten Termine liegt primär im individuellen Nutzungsszenario. Oder anders formuliert, manchmal vergisst man den zusätzlichen Kalender einzublenden.

Beispiel

Der folgende OWA-Screenshot zeigt den Eintrag für eine “Betriebsruhe” vom 24. Dezember 2024 bis zum 31. Dezember 2024.

Screenshot eines Kalenders in Outllok on the Web mit einem mehrtägigen Eintrag "Betriebsruhe"
Screenshot eines Outlook on the Web-Kalenders mit ganztägigem Kalendereintrag.

Der folgende Screenshot zeigt die Details des o.g. Eintrages. Dies entspricht dem letzten Beispieleintrag der weiter unten aufgeführten JSON-Datei.

Screenshot eines Kalendereintrags in Outlook on the Web mit Details und Hervorhebung von Datum, Ganztägig und Erinnerung
Details des ganztägigen Kalendereintrages “Betriebsruhe” vom 24. bis 31. Dezember 2024 ohne Erinnerung

Beispiel JSON-Datei

Das folgende Beispiel definiert drei Kalendereinträge mit dem Titel “Betriebsruhe”.

Wichtig ist, dass der Endezeitpunkt für ganztägige Einträge immer 0:00 Uhr des Folgetages sein muss.

Ein weiterer wichtiger Punkt ist die Nutzung der richtigen Zeitzone für den Kalendereintrag. Solltest du eine Zeitzone wählen, die nicht der Zeitzone des Kalendersentspricht, z.B. UTC, so wird der neue Eintrag im Kalender tagesübergreifend angezeigt. Das Auslesen der Zeitzone des Zielpostfaches ist aktuell noch nicht Bestandteil des Skriptes.

Die Übersicht der verfügbaren Zeitzonen-Namen lässt sich einfach per PowerShell ermitteln.

# Abfrage der verfügaren Zeitzonen
# Der Wert der Spalte ID ist in der JSON-Datei 
# für Ereignisse zu verwenden
Get-TimeZone -ListAvailable | ft ID,DisplayName

Hinweise zur JSON-Datei

Hier sind ein paar Hinweise zur Konfiguration eines Kalendereintrages.

  • eventAction beschreibt, ob ein Eintrag erstellt oder gelöscht werden soll
  • isAllDay
    • true – Ganztägiges Ereignis
  • showAs definiert, wie ein Eintrag im Kalender angezeigt wird
    • busy – Beschäftigt
    • oof – Abwesend
    • free – Frei
    • tentative – Unter Vorbehalt
    • workingElsewhere – An anderem Ort tätig
  • isreminderOn
    • false – Erinnerung ausgeschaltet

Weitere Parameter folgen bei Bedarf.

Die Skripte

Das Hinzufügen von Kalenderereignissen in Exchange Online Postfächern erfordert die Erstellung einer App-Registrierung in Entra. Diese Registrierung erfolgt mit Hilfe des Skriptes Add-EntraIdAppRegistration.ps1. Das Skript muss als Application Administrator oder Globaler Administrator ausgeführt werden.

Aktuell richtet das Skript für die Authentifizierung ein App-Secret ein. Hier kann natürlich auch ein Zertifikat zum Einsatz kommen. Die Erweiterung des Skriptes Add-CustomCalendarEvents.ps1 zur Nutzung einer Zertifikat-basierten Authentifizierung ist in Arbeit.

Add-EntraIdAppRegistration.ps1

Um die Registrierung durchzuführen, wird das PowerShell-Modul MIcrosoft.Graph verwendet. Es ist somit Installationsvoraussetzung. Sollte das Modul noch nicht vorhanden sein, kannst du es einfach mit folgendem Befehl installieren.

Install-Module Microsoft.Graph

Im param-Block sind einige Paramter vorbelegt. Die Werte solltest du für deine Umgebung anpassen. Dies gilt insbesondere für die Kontoinformationen des Applikationseigentümer.

Der folgende Befehl erstellt eine neue App-Registrierung im Mandanten, für den die Admin-Authentifizierung durchgeführt wird.

.\Add-EntraIdAppRegistration.ps1 -AppName CustomApplicationName -AppSecretName SomeFancySecret -AppOwnerEmailAddress AppAdminUser@varunagroup.de

Bei Abschluss ruft das Skript die Entra-URL der Applikation auf, um die administrative Zustimmung (Admin Consent) durchzuführen. Erst nach der Zustimmung besitzt die App-Registrierung die erforderlichen Berechtigungen, um auf Postfachkalender zugreifen zu können.

Dieses Skript wird nur einmal, zur initialen Einrichtung der App-Registrierung ausgeführt.

Add-CustomCalendarEvents.ps1

Dieses Skript erledigt die eigentliche Arbeit.

Auf Basis der Mitgliedschaft in einer referenzierten Sicherheitsgruppe und der JSON-Konfigurationsdatei erstellt oder löscht das Skript Kalenderereignisse. Mit Hilfe der Sicherheitsgruppe wird gesteuert, welche persönlichen Kalender aktualisiert werden. Die JSON-Datei definiert die Ereignisse und legt fest, ob ein Ereignis erstellt oder gelöscht werden soll.

Das Skript nutzt eine XML-Konfigurationsdatei, in der die allgemeinen Parameter definiert sind.

<?xml version="1.0"?>
<Settings>
	<TenantId>TenantId</TenantId>
	<ClientId>ClientId</ClientId>
	<ClientSecret>ClientSecret</ClientSecret>
	<SecurityGroupId>SecurityGroupObjectId</SecurityGroupId>
</Settings>

Die Ausführung des Skriptes ist sehr einfach.

# Ausführung mit den Standard-Parameter
.\Add-CustomCalendarEvents.ps1 

# Ausführung mit individuellen Paramtern
.\Add-CustomCalendarEvents.ps1 -EventFileName CustomEvents.json SettingsFileName CustomSettings.xml

Der folgende Screenshot zeigt die Ausführung des Skriptes.

Screenshot PowerShell-Ausführung

Links

Viel Spaß mit Exchange Online.

Kurz-URL | Short URL: https://granikos.eu/go/nHsT

Kommentar verfassen

Sie sehen gerade einen Platzhalterinhalt von Standard. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen

Entdecke mehr von Granikos GmbH & Co. KG

Jetzt abonnieren, um weiterzulesen und auf das gesamte Archiv zuzugreifen.

Weiterlesen