cbk882
Goto Top

Exchange 365 Kalender nach ics exportieren - länger als ein Jahr

Hallo ihr,

mich treibt grad ein Problem um und zwar soll ich einen Kalender, der bei Office 365 liegt als ics-Link so freigeben, dass er von Außenstehenden abonniert werden kann. Soweit so easy, Linkfreigabe, wget und alles ist gut. ABER: Leider kann man nur maximal ein Jahr in die Zukunft gehen, weil man über den Link nicht mehr kriegt. Ist laut MS-Support technisch so vorgegeben und nicht änderbar. Damit stirbt aber der Zweck der Freigabe und ich kanns auch lassen.

Ich suche also nach einem Tool, dem man die Benutzerdaten für diesen Kalender-Account gibt, und der selber durch den Kalender geht und alle Termine holt und als ics-Datei speichert. Gerne per Cron automatisierbar. Hab mir Cronofy mal angeschaut, aber da kein ics gefunden. Hat jemand ein Tool oder eine alternative Idee, wie man das lösen könnte?

Danke für eure Tipps,
Christoph

PS: bin dann gleich weg, werde also erst Dienstag wieder antworten können.

Content-Key: 369686

Url: https://administrator.de/contentid/369686

Printed on: April 20, 2024 at 05:04 o'clock

Member: Kraemer
Kraemer Mar 29, 2018 at 14:51:03 (UTC)
Goto Top
Zitat von @cbk882:
PS: bin dann gleich weg, werde also erst Dienstag wieder antworten können.
Tschüß bis Dienstag. Wünsche frohe Feiertage face-smile
Mitglied: 130127
130127 Mar 29, 2018 at 17:17:29 (UTC)
Goto Top
Grüß dich,

Nach Donnerstag kommt Freitag !
Wollte mich auch mit einem sinnfreien Kommentar beteiligen face-smile

Schöne Ostern !
Mitglied: 135799
Solution 135799 Mar 30, 2018 updated at 12:32:44 (UTC)
Goto Top
Dann mal zwischendurch was Sinnvolles zum Thema
Outlook Kalender ics per VBA Script automatisch per Email verschicken

Schnuffi
Member: cbk882
cbk882 Apr 03, 2018 at 14:58:59 (UTC)
Goto Top
Frohe Ostern gehabt zu haben face-wink

Danke Schnuffi, ich probiere grad mal aus. Melde mich, wenn ich was dazu sagen kann...
Member: cbk882
cbk882 Apr 05, 2018 at 09:45:20 (UTC)
Goto Top
So, hat doch was länger gedauert. Vielen Dank, Schnuffi, das wars. Hätte zwar gern vermieden, dass dafür ständig ne Windows-Kiste mit Outlook drauf laufen muss, aber so gehts jetzt auf jeden Fall.
Mitglied: 135799
135799 Apr 05, 2018 updated at 09:52:13 (UTC)
Goto Top
Naja, wenn man will kann man sich das auch mit EWS scripten und das über Taskplaner laufen lassen. Gehen tut das wenn man will.
Dank nicht mir sondern dem User der es gescriptet hat face-smile.
Member: cbk882
cbk882 Apr 05, 2018 at 10:15:20 (UTC)
Goto Top
Mach ich. Und EWS schau ich mir an, wenn ich mal ein Jahr hab, wo sonst nix passiert face-wink
Member: cbk882
cbk882 Apr 08, 2018 at 08:42:25 (UTC)
Goto Top
Hey Uwe (hat das Skript hinter dem Link geschrieben),
hab jetzt nur noch das Problem, dass die Umlaute nicht passen.
Es läuft jetzt also dein Skript auf Windows 7 mit Office 365 und holt aus einem Exchange-Account, der bei MS liegt die Termine.
In der letztlichen ics-Datei sind die Umlaute nicht in Ordnung. Aus einem "ü" wird ein "=FC" (andere Beispiele kann ich gern liefern, aber bin grad die Woche im Urlaub face-wink ). Hab auch schonmal geschaut, die Umlaute sind auch schon in der temporären-Datei kaputt.

Wenn man die Datei dann in einem anderen Outlook abonniert, zeigt er es zwar korrekt an, meckert aber beim synchronisieren, dass die Datei Fehler hat.

Hast du mir nen Tipp, wo ich das ändern kann? Gibt es eine vbs-Funktion, die man nutzen kann, oder muss man mit "suchen-ersetzen" arbeiten?

Lieben Gruß
Christoph
Member: colinardo
colinardo Apr 08, 2018 updated at 09:14:31 (UTC)
Goto Top
In der letztlichen ics-Datei sind die Umlaute nicht in Ordnung. Aus einem "ü" wird ein "=FC"
Das ist nach ICS Spezifikation korrekt (Quoted Printable)! Ich hatte nur das Encoding der Datei nicht auf UTF-8 gesetzt deswegen gab es hier wohl bei manchen Clients Probleme.
Siehe:
Outlook Kalender ics per VBA Script automatisch per Email verschicken

Grüße Uwe
Member: cbk882
cbk882 Apr 18, 2018 at 14:53:43 (UTC)
Goto Top
OK, scheinbar hab ich mich vertan und es lag an Terminen, bei denen in der ics-Datei der Wert "TRANSP=1" gesetzt war. Es waren nur zufällig auch Termine mit Umlauten. Wobei ich nicht weiß, was man in Outlook beim Termin Erstellen anstellen muss, damit dieser Wert erscheint. Ich hab die Zeilen jetzt einfach überall gelöscht.

Ansonsten ist jetzt alles fein, danke dir.

Gruß Christoph
Member: colinardo
colinardo Apr 18, 2018 updated at 15:03:15 (UTC)
Goto Top
Hi Christoph,
TRANSP=1
Der Parameter bestimmt ob der Termin in Free/Busy Scans auftaucht oder nicht
https://www.kanzaki.com/docs/ical/transp.html
Normalerweise wird das durch die Markierung eines Termins als "Privat" in Outlook gesetzt.

Grüße Uwe
Member: cbk882
cbk882 Apr 18, 2018 at 15:23:48 (UTC)
Goto Top
Ja, aber TRANSP darf entweder "OPAQUE" oder "TRANSPARENT" sein. "1" ist nicht vorgesehen und bringt eben den Fehler.
Member: colinardo
colinardo Apr 18, 2018 updated at 15:32:55 (UTC)
Goto Top
Joa, Microsoft denkt halt nur im Outlook Imperium, "Standard" ist da manchmal ein Fremdwort face-smile.
Member: cbk882
cbk882 Aug 02, 2018 at 06:41:38 (UTC)
Goto Top
So, nachdem das bisherige Skript nicht so ganz rund lief und die ics-Dateien auch keinen ics-Validator überlebt haben, hab ich nochmal neu gebaut. Es nutzt jetzt den GetCalendarExporter. Außerdem hab ich einen Sync-Test-Termin eingebaut, der wird automatisch auf den Montag der aktuellen Woche verschoben. Dann kann man direkt sehen, von welcher Woche der letzte Stand ist, den das Kalenderprogramm heruntergeladen hat. Ist für Supportfälle ("Die Termine sind noch überhaupt nicht drin!!!!!") sehr hilfreich face-smile

'Die gewünschte Anzahl von Tagen eingeben, die im exportierten Kalender sein sollen, hier 5 Jahre Zukunft, 3 Monate Vergangenheit  
Const DAYS_TO_EXPORT_AHEAD = 1825
Const DAYS_TO_EXPORT_BEFORE = 90

'Pfad für die exportierte Datei  
SAVE_TO_PATH = "C:\export.ics"  
strCalName = "Kalenderabo"  
 
Dim olkApp, olkSes, olkCal, olkSha

On Error Resume Next
Set olkApp = GetObject(, "Outlook.Application")  
If olkApp Is Nothing Then
  Set olkApp = CreateObject("Outlook.Application")  
End If

' Hier muss man ein bisschen schauen, auf welchem Pfad der Kalender liegt. Hier ein Unterordner im geteilten Kalender-Exchange-Account  
Set olkCal = olkApp.GetNamespace("MAPI").Folders.Item("kalenderaccount@example.com").Folders.Item("Kalender").Folders.Item(strCalName)  

' Hier wird der Sync-Test-Termin verschoben  
For Each app In olkCal.Items
        If app.Subject = "Sync-Test-Termin" Then  
			mon = DateAdd("d", -((Weekday(date) + 7 - 2) Mod 7), date)  
			daystring = Day(mon) & "/" & Month(mon) & "/" & Year(mon) & " 08:00"  
			app.Start = daystring
			app.Save
		End If
Next

Set olkSha = olkCal.GetCalendarExporter

' Hier weitere Infos dazu https://msdn.microsoft.com/de-de/vba/outlook-vba/articles/calendarsharing-saveasical-method-outlook  
With olkSha
    .CalendarDetail = olFullDetails
    .IncludeWholeCalendar = False
    .IncludeAttachments = False
    .IncludePrivateDetails = True
    .RestrictToWorkingHours = False
    .StartDate = Date - DAYS_TO_EXPORT_BEFORE
    .EndDate = Date + DAYS_TO_EXPORT_AHEAD
    .SaveAsICal SAVE_TO_PATH
End With
Set olkSha = Nothing
Set olkCal = Nothing
olkSes.Logoff
Set olkSes = Nothing
Set olkApp = Nothing