会議室がどのくらい利用されているのかを知りたいなどの理由から、Exchange Online の会議室メールボックスのカレンダーに登録されている予定の情報をエクスポートできないかと相談されることがあります。
ちょっと調べてみたところ、そのような情報は Microsoft Graph API を利用することで取得することができそうでした。そこで、PowerShell の Microsoft Graph PowerShell SDK を利用して、簡単な情報を CSV ファイルにエクスポートするスクリプトを作成してみました。
Microsoft Graph PowerShell SDK をインストール
まず大前提として、パソコンに Microsoft Graph PowerShell SDK がインストールされている必要があります。詳しい情報は、下記 URL のリンク先をご覧ください。
Install the Microsoft Graph PowerShell SDK
https://learn.microsoft.com/ja-jp/powershell/microsoftgraph/installation?view=graph-powershell-1.0
ここで最低限おさえておくべきはインストール方法です。PowerShell を管理者権限で開き、次のコマンドを実行することでインストールできます。
Install-Module Microsoft.Graph
インストールはインターネットに接続して状態で行い、2~3 分くらいで終わるでしょうか。
会議室から予定データを取得するスクリプト
今回作成したスクリプトは次のようになります。
$MeetingRoom = "MeetingA@example.com"
$StartDataTime = "2024-06-01T00:00:00+09:00"
$EndDataTime = "2024-07-01T00:00:00+09:00"
$CsvPath = "C:\data\MeetingData.csv"
Connect-MgGraph -Scopes "User.Read.All","Calendars.Read.Shared"
$MeetingData = Get-MgUserCalendarView -UserId $MeetingRoom -StartDateTime $StartDataTime -EndDateTime $EndDataTime -All
$ExportMeetingData = @()
$MeetingData | ForEach-Object {
$obj = New-Object Object
$MeetingSubject = $_.Subject
[Datetime]$MeetingStart=$_.Start.DateTime
$MeetingStartTime=$MeetingStart.ToLocalTime()
[Datetime]$MeetingEnd=$_.End.DateTime
$MeetingEndTime=$MeetingEnd.ToLocalTime()
$MeetingOrganizer = $_.Organizer.EmailAddress.Address
$obj | Add-Member -NotePropertyMembers @{
"Subject" = $MeetingSubject
"StartTime" = $MeetingStartTime
"EndTime" = $MeetingEndTime
"Organizer" = $MeetingOrganizer
}
$ExportMeetingData += $obj
}
$ExportMeetingData | Export-Csv -Path $CsvPath -NoTypeInformation -Encoding utf8
Disconnect-MgGraph
ちょっとだけスクリプトの内容を説明します。Connect-MgGraph
は、PowerShell から Microsoft Graph に接続するためのコマンドです。Spoce
の値で、Microsoft Graph のどのような権限を利用するかを指定しています。今回は、会議室のカレンダーを読み取る権限が必要なので、"Calendars.Read.Shared"
の権限を要求しています。
Connect-MgGraph
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.graph.authentication/connect-mggraph?view=graph-powershell-1.0
そして、Get-MgUserCalendarView
でカレンダーの情報を取得しにいきます。UserId
に会議室のメールアドレスを指定し、StartDateTime
と EndDateTime
には予定を取得したい期間の開始時間と終了時間を指定します。取得される予定の件数が多い場合に備えて、All
を付け加えて全件取得するようにしています。それぞれの設定に必要な値は、スクリプトの冒頭に変数として定義しておきました。
Get-MgUserCalendarView
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.graph.calendar/get-mgusercalendarview?view=graph-powershell-1.0
これで会議予定の情報は取れたので、あとは必要な情報を抜き出して CSV ファイルにエクスポートしています。すべての処理が終わったら Disconnect-MgGraph
で Microsoft Graph から切断しましょう。
Disconnect-MgGraph
https://learn.microsoft.com/sl-si/powershell/module/microsoft.graph.authentication/disconnect-mggraph?view=graph-powershell-1.0
スクリプトを実行する
スクリプトを実行すると、Microsoft 365 のサインイン画面が表示された後、Microsoft Graph に接続するための権限を取得するためのダイアログが表示されます。
その後スクリプトが実行され、問題なく処理が終われば $CsvPath
の変数に指定した場所に CSV ファイルが作られているはずです。
注意点として、このスクリプトは実行者の権限で動作するので、そもそも実行者に会議室リソースのカレンダーにアクセス権限が無ければ CSV にも情報は入りません。そのため、上手く実行できない人もいるかもしれません。
さいごに
PowerShell のスクリプトを利用すると、思ったよりも簡単に会議室メールボックス内の情報が取得できるようでした。
今回はじめて Microsoft Graph PowerShell SDK をちゃんと利用してみましたが、使い方が分かれば色んなことが出来そうですね。これからも色々と試してみたいと思います。