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-ID: 369686

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

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

Kraemer
Kraemer 29.03.2018 um 16:51:03 Uhr
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
130127
130127 29.03.2018 um 19:17:29 Uhr
Goto Top
Grüß dich,

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

Schöne Ostern !
135799
Lösung 135799 30.03.2018 aktualisiert um 14:32:44 Uhr
Goto Top
Dann mal zwischendurch was Sinnvolles zum Thema
Outlook Kalender ics per VBA Script automatisch per Email verschicken

Schnuffi
cbk882
cbk882 03.04.2018 um 16:58:59 Uhr
Goto Top
Frohe Ostern gehabt zu haben face-wink

Danke Schnuffi, ich probiere grad mal aus. Melde mich, wenn ich was dazu sagen kann...
cbk882
cbk882 05.04.2018 um 11:45:20 Uhr
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.
135799
135799 05.04.2018 aktualisiert um 11:52:13 Uhr
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.
cbk882
cbk882 05.04.2018 um 12:15:20 Uhr
Goto Top
Mach ich. Und EWS schau ich mir an, wenn ich mal ein Jahr hab, wo sonst nix passiert face-wink
cbk882
cbk882 08.04.2018 um 10:42:25 Uhr
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
colinardo
colinardo 08.04.2018 aktualisiert um 11:14:31 Uhr
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
cbk882
cbk882 18.04.2018 um 16:53:43 Uhr
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
colinardo
colinardo 18.04.2018 aktualisiert um 17:03:15 Uhr
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
cbk882
cbk882 18.04.2018 um 17:23:48 Uhr
Goto Top
Ja, aber TRANSP darf entweder "OPAQUE" oder "TRANSPARENT" sein. "1" ist nicht vorgesehen und bringt eben den Fehler.
colinardo
colinardo 18.04.2018 aktualisiert um 17:32:55 Uhr
Goto Top
Joa, Microsoft denkt halt nur im Outlook Imperium, "Standard" ist da manchmal ein Fremdwort face-smile.
cbk882
cbk882 02.08.2018 um 08:41:38 Uhr
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