Microsoft Graph APIを使って、teamsの情報を抽出する方法

2023年5月29日

・チームメンバが、日々、何の仕事にどれくらいの稼働をかけているか調べる必要が出た
・普段、チームメンバは、日々の予定をteamsのスケジュールに投入しているので、そこから情報抽出できれば、自動的にメンバの稼働集計できそうだと考えた。

コード

以下のコードをPowershellで流すだけ。

ほぼ、ChatGPT君に作ってもらった

test.onmicrosoft.comにいるtestuserの5月分のteamsカレンダーから、予定の「件名」と予定の「開始・終了時間」を抽出しています。(「開始・終了時間」は、コードを少し変更すれば「所要時間」に変更することも可能)

#######################GraphAPI接続 start
$clientid = “××××××××××"
$tenantName = “test.onmicrosoft.com"
$clientSecret = “××××××××××"

$ReqTokenBody = @{
    Grant_Type    = “client_credentials"
    Scope         = “https://graph.microsoft.com/.default"
    client_Id     = $clientid
    Client_Secret = $clientSecret
}

$TokenResponse = Invoke-RestMethod -Uri “https://login.microsoftonline.com/$tenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody
#######################GraphAPI接続 end

#######################GraphAPIで情報取得
$apiUrl = “https://graph.microsoft.com/v1.0/users/testuser1@test.onmicrosoft.com/calendarView?startDateTime=2023-05-01T00:00:00Z&endDateTime=2023-05-31T23:59:59Z%22

$Data = Invoke-RestMethod -Headers @{Authorization = “Bearer $($TokenResponse.access_token)"} -Uri $apiUrl -Method Get
$Data.value | Select-Object Subject, Start, End | Format-Table -AutoSize

実行結果

subject             start                                                 end
——-             —–                                                 —
A市様案件打ち合わせ @{dateTime=2023-05-16T03:00:00.0000000; timeZone=UTC} @{dateTime=2023-05-16T04:30:00.0000000; timeZone=UTC}
B市様設計資料作成   @{dateTime=2023-05-17T04:00:00.0000000; timeZone=UTC} @{dateTime=2023-05-17T07:00:00.0000000; timeZone=UTC}
D県様トラブル対応   @{dateTime=2023-05-17T07:30:00.0000000; timeZone=UTC} @{dateTime=2023-05-17T09:00:00.0000000; timeZone=UTC}

その他

ちなみに、この作業をする前提としてAADにアプリを登録する必要があるのでが、会社のテナントのAAD管理画面の操作権限が私にはないため、実現できなかった。。。。

参考にしたURL(ほぼこのまま)

https://qiita.com/kura_yu/items/cd2ebc1763a8923f3d7a