PowerShell을 사용하여 CSV로 Microsoft Teams 비교 표 내보내기

2020년 10월 22일에 다음과 같은 장과 절을 추가하였다.
● MS의 승인을 받아 보호된 API 사용

개시하다


이 투고는요.
Office365 Advent Calendar 2019
라고 투고했다.

일람표를 얻고 싶은 계기.


다음 기사를 읽은 것이'해보자'는 계기였다.
코드를 쓰지 않더라도 Power Automate를 사용하면 정보를 쉽게 얻을 수 있습니다.
마이크로소프트 팀 특정 채널의 인기 차트를 만들어라!1~Azure AD에 어플리케이션 등록
나는 이 방법을 정보 획득 도구에 응용하고 싶다.
"임차인에 대한 정보를 얻으세요"
위탁
이어 "(゜◇ ゜)잘 알고 있다"며 "잘 얻어내겠다"며 "도구를 잘 집행하겠다"고 덧붙였다.
이렇게 실행하는 것은 파일을 완성하는 도구로서 출력을 얻을 수 있는 것이 이상적이다.
이번에는 Graph API를 사용하기 위해 사전 준비로 GUI에만 Azuread 앱을 등록했다.
CSV 형식은 출력의 예입니다.
데이터베이스에 로그인하거나 PowerBI의 데이터 세트로 로그인하면 목적에 따라 조정할 수 있습니다.

최종 완성 인상


채널 대화에서 투고한 반응을 CSV로 출력합니다.
CSV 행은 반응을 나타냅니다.
반응은 Teams가 채팅할 때 할 수 있는 반응(=좋아, 마음, 웃음, 놀라움, 슬픔, 분노)이다.

얻은 정보는 다음과 같다.
• 반응의 종류 (=좋아, 마음, 웃음, 놀라움, 슬픔, 분노)
반응의 시간
· 누가 반응했는지(표시 이름과 UPN)
·누구에게 반응했는지(표시 이름과 UPN)
• 채널 이름
• 라인 또는 응답
• 반응 대상의 발언 내용
· 발언 ID
• 답장 주소의 ID

중도 성과물의 완성 인상


PowerShell의 소스 코드 전문이 기재되면 길어지기 때문에'지정된 특정 채널에서 반응을 얻기'처리 부분에 초점을 맞춘다.

얻은 정보는 다음과 같다.
• 반응의 종류 (=좋아, 마음, 웃음, 놀라움, 슬픔, 분노)
반응의 시간
· 누가 반응했는지 (사용자 ID)
·누구에게 반응했는지(사용자 ID)
• 채널 이름
• 라인 또는 응답
• 반응 대상의 발언 내용
· 발언 ID
• 답장 주소의 ID
채널의 본문을 가져오는 API에서 사용자 이름을 직접 가져올 수 없습니다.
여기에서 얻을 수 있는 것은 사용자 ID입니다.
사용자 정보를 얻는 API에 가져온 ID를 전달하여 사용자 이름, UPN, 메일 주소를 가져옵니다.후술

필요한 사전 준비


AzureaD에 응용 프로그램 등록


Microsoft Graph API를 사용하기 위해 AzureaD에 애플리케이션을 등록합니다.
등록 방법은 아래의 문장을 참조하십시오.
마이크로소프트 팀 특정 채널의 인기 차트를 만들어라!1~Azure AD에 어플리케이션 등록
필요한 액세스 라이센스는 다음과 같습니다.

PowerShell에서 AzureaD 애플리케이션을 사용할 ID 얻기


등록된 AzureaD 애플리케이션의 다음 정보를 메모에 기록합니다.
임차인 ID
· 클라이언트 ID
· 클라이언트 기밀

MS로부터 보호된 API 사용 허가


※ 이 장은 2020년 10월 22일에 추가되었습니다.
애플리케이션 액세스 라이센스에서 채널 메시지 일람표를 받은 API는 세입자 중 모든 팀의 정보를 액세스할 수 있기 때문에'보호된 API(Proted API)'로 간주된다.
보호된 API를 사용할 때는 Microsoft에 응용 ID 및 API 사용 목적을 전달하고 API 사용 승인을 받아야 합니다.승인을 받기 전에 API에 요청을 던지면 오류가 발생합니다.
승인 요청을 제출하는 방법은 아래 링크된 Docs의 기사를 참조하십시오.
Microsoft Teams 보호 API

승인 후 아래 그림과 같은 메일을 보냅니다.

파티와 채널의 ID 획득


좋은 일람표를 얻고 싶은 채널의 아래 정보를 노트에 적어주세요.
팀 ID
채널 ID
획득 방법은 아래 내용을 참조하시오.
마이크로소프트 팀 특정 채널의 인기 차트를 만들어라!2~GraphiapI를 통해 출력 확인~

지정된 채널의 좋아요를 받는 PowerShell 소스 코드


소스 코드


다음 5개를 노트 내용으로 바꿔주세요.
· 임차인 ID
· 【클라이언트 ID】
・[클라이언트 기밀]
【파티ID】
/[채널 ID]
PowerShell로 지정된 채널의 좋아요를 받아보세요.
#トークンを取得
$url = "https://login.microsoftonline.com/【テナントID】/oauth2/token"

$body = @{
    "grant_type" = 'client_credentials'
    "resource" = 'https://graph.microsoft.com'
    "client_id" = '【クライアントID】'
    "client_secret" = '【クライアントシークレット】'
}

$contentType = "application/x-www-form-urlencoded"
$oauth = Invoke-RestMethod -uri $url -Method post -Body $body -ContentType $contentType

#チャネル内のスレッドをすべて取得
$url = "https://graph.microsoft.com/beta/teams/【チームID】/channels/【チャネルID】/messages/" -f $channel.id
$headerParams  = @{'Authorization'="$($oauth.token_type) $($oauth.access_token)"}
$contentType = "application/json"
$responseFromAPI = Invoke-RestMethod -uri $url -Method Get -header $headerParams -ContentType $contentType

$messagesWithOutReply = @()
$messagesWithOutReply += $responseFromAPI.value

$messagesWithReply = @()
$messagesWithReply += $responseFromAPI.value


#返信をすべて取得
foreach($m in $messagesWithOutReply)
{
    $url = "https://graph.microsoft.com/beta/teams/0ad9e708-d8ef-4f9f-9188-6b2f875c0cf0/channels/19:[email protected]/messages/{0}/replies" -f $m.id
    $headerParams  = @{'Authorization'="$($oauth.token_type) $($oauth.access_token)"}
    $ContentType = "application/json"
    $responseFromAPI = Invoke-RestMethod -uri $url -Method Get -header $headerParams -ContentType $ContentType

    $messagesWithReply += $responseFromAPI.value
}

#いいねをCSVに出力
foreach($message in $messagesWithReply)
{
    if($message.reactions.Count -eq 0)
    {
        continue
    }

    $reactions = @()
    $reactions += $message.reactions

    foreach($reaction in $reactions)
    {
        $obj = New-Object PSObject | Select "ReactionType","CreatedDateTime","From","To","Content","ID","ReplyToID"

        #リアクションの種類
        $obj.ReactionType =  $reaction.reactionType

        #リアクションをした日時
        $obj.CreatedDateTime = $reaction.createdDateTime

        #誰がリアクションをしたか
        $obj.From =  $reaction.user.user.id

        #誰に対してリアクションをしたか
        $obj.To =  $message.from.user.id

        #リアクション対象の投稿内容
        $obj.Content = $message.body.content

        #投稿ID
        ##スレッドでも返信でも投稿IDを持っている
        $obj.ID = $message.id

        #返信先のID
        ##この値が空白値の場合は返信ではなくスレッド
        $obj.ReplyToId = $message.replyToId

        $obj |  Export-Csv -Path ".\output.csv" -Encoding UTF8 -NoTypeInformation -Append
    }#foreach($reaction in $reactions)
}#foreach($message in $messagesWithReply)

가져온 CSV 이미지(다시 업로드)



이거 개량.


API에 팀 ID를 전달하여 PowerShell 프로세스에서 채널 일람을 가져옵니다.
https://graph.microsoft.com/beta/teams/[팀 ID] /channels.
API에 사용자 ID를 전달하고 PowerShell 프로세스에서 사용자 이름 및 UPN을 가져옵니다.
https://graph.microsoft.com/v1.0/users/[이름 부르는 중]
다음 두 객체도 내보냅니다.
후자는 '답장 주소의 ID' 를 IsNullOrEmpty 방법에 건네준 후 되돌아오는 값으로 판정할 수 있다.
• 채널 이름
• 라인 또는 응답

최종 완성 인상(재검토)


그게 다야.

좋은 웹페이지 즐겨찾기