Экспорт элементов календаря в CSV-файл с помощью Microsoft Graph и Powershell

 течение последних двух лет самым популярным постом по количеству просмотров в этом блоге был экспорт элементов календаря в CSV-файл с помощью EWS и Powershell, за которым следовали скрипты экспорта контактов. Это показывает, что это просто вечная проблема, которая существует вокруг почтовых серверов, я думаю, что первый сценарий VBS, который я написал, чтобы сделать это, был в конце 90-х годов против Exchange 5.5 с использованием cdo 1.2.


Теперь это 2020 год, и если вы используете Office365, вы действительно должны использовать API Microsoft Graph для этого. Итак, что я сделал, так это создал модуль PowerShell (и я сделал его однофайловым скриптом для тех, кто более удобен в этом формате), который является портом сценария EWS выше, который так популярен. Этот сценарий использует библиотеку ADAL для современной аутентификации (которая, если вы захватите библиотеку из галереи PowerShell, будет спускаться вместе с модулем). Большинство свойств EWS сопоставляются один к одному с графом,и график фактически предоставляет лучшую информацию о рецидивах, чем EWS. Where extended properties where used in the EWS script the equivalent is used in the Graph. (Единственное реальное различие-это свойство AppointmentState, которое является строго типизированным свойством в EWS, но мне пришлось использовать расширенное свойство в графике).

Всего пара вещей, если вы новичок в Microsoft Graph scripts и современной аутентификации, которые вам нужно знать

1. Для этого вам потребуется одобренная регистрация приложения Azure (или любого сценария, который будет обращаться к графику). Пошаговые инструкции Microsoft https://docs.microsoft.com/en-us/graph/auth-register-app-v2 они довольно хорошо описывают, как это сделать. Конкретную конфигурацию я рекомендую вам использовать

- да. https://login.microsoftonline.com/common/oauth2/nativeclient " as the redirectURL (это часть предлагаемого URI перенаправления для публичных клиентов (мобильных, настольных)).

2. Разрешение на вышеуказанное

Вам нужны только следующие разрешения для работы этого скрипта, календарь.Чтение дает вам права на календарь, учетную запись, которая используется, и календарь.Читать.Shared предоставляет вам доступ для чтения к любым календарям, к которым была предоставлена доступная учетная запись (например, через делегирование, портал администратора или add-mailboxpermission).

Затем вам просто нужно скопировать guid идентификатора приложения (клиента) с обзорного экрана регистрации приложения и использовать его, как в параметре-clientId paraemter командлета Export-GCECalendarToCSV.

Я включил демонстрационную регистрацию мультитенантного приложения по умолчанию в модуль, который просто имеет эти права, которые вы можете использовать для тестирования, но я бы всегда рекомендовал вам создать свое собственное.

Вы можете установить модуль, который даст вам доступ к командлетам Export-GCECalendarToCSV и Export-GCECalendar из галереи Powershell https://www.powershellgallery.com/packages/MSGraph-ExportCalendar / (смотрите инструкцию на этой странице).

Или если вы хотите взять скрипт и изменить его самостоятельно он расположен на GitHub https://github.com/gscales/Powershell-Scripts/blob/master/MSGraph-ExportCalendar/functions/Export-GCECalendarToCSV.ps1

Простой пример экспорта последних 7 дней календарной встречи в csv

Экспорт-GCECalendarToCSV-имя почтового ящика gscales@datarumble.com -StartTime (Get-дата).AddDays(-7) - EndTime (Get-Date) - имя файла c:\temp\Last7.csv