コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

【Microsoft Teams】申請されたユーザーを指定のTeams のチームに自動で追加する


スポンサードリンク

今回は申請のあったユーザーをMicorosft Teams の指定のチームに自動で追加する方法を纏めたいと思います。
想定するシーンは昨今盛り上がっているオンライン勉強会やオンライン飲み会などで不特定多数のユーザーを自身のテナントのチームに招待したい場合などに有効かと思います。

全体の流れ

ざっくり説明すると以下のようになります。

  1. ユーザーがForms に情報を入力し、回答します。
  2. Forms に回答が送信されるとフローが実行します。
  3. フローが実行されると、Azure Automate で作成したジョブが実行されます。
  4. ジョブが実行されると、
    1. ユーザーを自身のテナントに招待するためのメールがユーザーに送信されます。
    2. ユーザーをチームに追加します。

f:id:koruneko:20200723173830p:plain

以下でこれらの流れの作成方法を紹介します。

Azure Automation

Azure Automation のデプロイ

  1. Azure Portal にログインを行い、「リソースの作成」を選択します。
    f:id:koruneko:20200719174315p:plain

  2. 「オートメーション」を作成します。
    f:id:koruneko:20200719174423p:plain

  3. 必要項目を入力します。
    f:id:koruneko:20200719174647p:plain

    • 名前:任意の名前を入力します。
    • サブスクリプション:任意のサブスクリプションを選択します。
    • リソースグループ:任意のリソースグループを選択、もしくは新規作成します。
    • 場所:任意の場所を選択します。今回は、「東日本」を選択します。
    • Azure 実行アカウントの作成:今回は不要なので「いいえ」を選択します。
  4. 入力が完了したら、「作成」を選択し、デプロイを行います。

  5. デプロイが無事完了しました!
    f:id:koruneko:20200719175301p:plain

モジュールを追加する

  1. 共有リソースより、「モジュール」を選択します。
    f:id:koruneko:20200719175611p:plain

  2. ギャラリーを参照を選択します。
    f:id:koruneko:20200719175739p:plain

  3. 検索窓より「Teams」と検索して、「MicrosoftTeams」を選択します。
    f:id:koruneko:20200719175931p:plain

  4. 「インポート」を選択して、Azure Automation にモジュールを追加します。
    インポートには少し時間がかかるので、少し休憩を行いましょう。
    f:id:koruneko:20200719180048p:plain

  5. モジュールの追加が無事完了しました!
    f:id:koruneko:20200719181003p:plain

  6. 同様の方法で「AzureADPreview」のインポートも行いましょう。 f:id:koruneko:20200723164014p:plain

資格情報の追加

追加を行うTeams のチームにメンバーの追加を行うことができる所有者のユーザー情報を記録します。

  1. 共有リソースより、「資格情報」を選択します。
    f:id:koruneko:20200719181415p:plain

  2. 「資格情報の追加」を選択します。
    f:id:koruneko:20200719181555p:plain

  3. 必要項目を入力します。
    f:id:koruneko:20200719181810p:plain

    • 名前:任意の名前を入力します。
    • 説明:後から確認したときにわかりやすいよう、対象の資格情報の説明を入力します。
    • ユーザー名:ユーザー名(上記説明の権限のあるユーザー)を入力します。
    • パスワード:パスワード(上記説明の権限のあるユーザーのパスワード)を入力します。
    • パスワードの確認入力:先ほど入力したパスワードをもう一度入力します。
  4. 「作成」を選択して完了です!

PowerShell スクリプトの登録

  1. プロセス オートメーションより「Runbook」を選択します。
    f:id:koruneko:20200719222338p:plain

  2. 「Runbook の作成」を選択します。
    f:id:koruneko:20200719222519p:plain

  3. 必要項目を入力します。
    f:id:koruneko:20200719222800p:plain

    • 名前:任意の名前を入力します。
    • Runbook の種類:「PowerShell」を選択します。
    • 説明:後から確認したときにわかりやすいよう、対象のRunbook の説明を入力します。
  4. 作成が完了するとPowerShell の編集画面が表示されます。
    f:id:koruneko:20200719223309p:plain

試しに、Microsoft Teams コマンドレットの一覧を確認してみましょう!
以下のスクリプトを入力して、コマンドレットの一覧を表示します。

Get-Command -Module MicrosoftTeams

スクリプトの入力後、「テストウィンド」を選択し、「開始」を選択します。
f:id:koruneko:20200720081633p:plain f:id:koruneko:20200720081815p:plain

無事コマンドレットの一覧を表示することができました! f:id:koruneko:20200720081504p:plain

続いて、先ほど追加した資格情報の確認を行います。
次のスクリプトを入力して、テナント内に作成されたすべてのチームの一覧を取得してみましょう。

$myCredential = Get-AutomationPSCredential -Name 'Credential Name'
Connect-MicrosoftTeams -Credential $myCredential
Get-Team

「Credential Name」には「資格情報」を作成したときの「名前」を入力してください。

f:id:koruneko:20200721080426p:plain

f:id:koruneko:20200721080445p:plain

無事テナント内に作成されたすべてのチームの一覧を取得することができました!

次に今回の目的でもある指定のTeams のチームにユーザーを追加するスクリプトを作成したいと思います。
次のスクリプトを入力します。

$myCredential = Get-AutomationPSCredential -Name 'Credential Name'
Connect-MicrosoftTeams -Credential $myCredential
$invitationUser = 'user@email.com'
Get-Team -DisplayName 'Team Name' | Add-TeamUser -User $invitationUser -Role Member

最初の2行は先ほどの資格情報のときと同様テナントへのログインを行っています。
3行目では「$invitationUser」という変数に追加したいユーザーのメールアドレスを指定しています。
4行目では、「Team Name」というチームに3行目で指定したユーザーをロール、メンバーで追加しています。

Add-TeamUser のリファレンスが気になる方はこちらのdocs、Add-TeamUserをご確認ください。

下記は上記スクリプトの実行結果です。
無事実行できているようです!

f:id:koruneko:20200721081943p:plain

変数を利用する

現在チーム名がスクリプトにべた書きなので変数に置き換えたいと思います。

Automation アカウントに戻り、共有リソースより、「変数」を選択します。

f:id:koruneko:20200722013829p:plain

「変数の追加」を選択して、変数の追加を行います。

f:id:koruneko:20200722014213p:plain

必要項目を入力します。

f:id:koruneko:20200722015132p:plain

  • 名前:任意の変数名を入力します。
  • 説明:変数の説明を記載します。
  • タイプ:変数の型をしていします。今回は「文字列」を指定します。
  • 値:変数の値を入力します。
  • 暗号化:暗号化を行うか選択します。

変数の設定が完了したら、PowerShell Runbook に戻ります。

先ほどのスクリプトに先ほど追加した変数の読み込みを追加します。
変数の読み込みは「Get-AutomationVariable -Name 'VariableName'」で行うことができます。
なので以下のように入力します。

$myCredential = Get-AutomationPSCredential -Name'Credential Name'
Connect-MicrosoftTeams -Credential $myCredential
$invitationUser = 'user@email.com'
$teamName = Get-AutomationVariable -Name  'VariableName'
Get-Team -DisplayName $teamName | Add-TeamUser -User $invitationUser -Role Member

以上で変数の使い方の説明は終了です。

ユーザーのメールアドレスをパラメーターとして設定する

招待を行うユーザーのメールアドレスは都度変化するので、実行するたびに値を指定のものに変化させる必要があります。
このようにスクリプト実行ごとに値を変化させたい場合はRunbook の入力パラメーターを使用します。

スクリプトを以下のように変更します。

Param
(
    [Parameter (Mandatory= $true)]
    [string] $invitationUser
)

$myCredential = Get-AutomationPSCredential -Name 'Credential Name'
Connect-MicrosoftTeams -Credential $myCredential

$teamName = Get-AutomationVariable -Name  'VariableName'
Get-Team -DisplayName $teamName | Add-TeamUser -User $invitationUser -Role Member

「[Parameter (Mandatory= $true)]」としているので、こちらのParameter は必須入力となります。

テストウィンドを開いてみましょう!
テストウィンドをみてみると下記のようにParam 入力項目が作成されているのがわかります。

f:id:koruneko:20200722024716p:plain

ここまで作成できたら、入力内容に誤りがないかを確認するためにも一度動作確認を行っておきましょう。

Param に関しては、こちらにどのように設定すべきかが説明されているので、詳しく見たい方はRunbook の入力パラメーターを構成するをご覧ください。

外部ユーザーを自身のテナントに招待する

これまでのスクリプトで、Teams の特定のチームにユーザーを追加するスクリプトを作成しましたが、このスクリプトで追加できるのは同一テナントに存在しているユーザーのみです。
外部ユーザーをチームに追加するためには、外部ユーザーを自身のテナントに招待する。というステップが必要になります。

外部ユーザーの招待方法はこちらのdocs が参考になります。
クイック スタート:PowerShell を使用してゲスト ユーザーを追加する

それでは上記サイトを参考に、PowerShell Runbook を編集していきましょう。

コマンドを以下のように変更します。

Param
(
    # 追加
    [Parameter (Mandatory= $true)]
    [string] $userName,
    [Parameter (Mandatory= $true)]
    [string] $invitationUser
)

$myCredential = Get-AutomationPSCredential -Name 'Office365 Admin Login'

# 追加
Connect-AzureAD -TenantDomain "<Tenant_Domain_Name>" -Credential $myCredential
New-AzureADMSInvitation -InvitedUserDisplayName $userName -InvitedUserEmailAddress $invitationUser -InviteRedirectURL https://myapps.microsoft.com -SendInvitationMessage $true

Connect-MicrosoftTeams -Credential $myCredential

$teamName = Get-AutomationVariable -Name 'TeamDispName'
Get-Team -DisplayName $teamName | Add-TeamUser -User $invitationUser -Role Member

「# 追加」とコメントしている箇所が今回追加した箇所になります。
Parameter には「$userName」というParam を追加しています。
ここには招待するユーザーの表示名を代入します。

「Connect-AzureAD ...」にて自身のテナントにアクセスしています。
「"<Tenant_Domain_Name>"」には自身のテナントドメインを入力してください。(管理ポータルなどから確認できます。)
ここも変数として設定しておいてよいかもですね。

「New-AzureADMSInvitation」では、「$invitationUser」に対して、自身のテナントに招待するためのメールを送信しています。
招待されたユーザーは、「$userName(ゲスト)」というユーザー名で自身のテナントに追加されます。

最後に動作確認を行ったら、「公開」を選択してください。
これを行わないと変更が反映されません。

以上でAzure Automation の設定は完了です!
ここまでできたら後はもう少しです!頑張りましょう!!

Forms を作成する

Microsoft Forms にアクセスして、招待をされる側のユーザーが自身の情報(メールアドレスやニックネーム)を入力するフォームの作成を行います。

今回入力項目として、最低限必要なのは

  1. ユーザー名
  2. メールアドレス

なので上記2つの入力項目は最低限設けて作成してください。
Forms の作成方法は今回は割愛します。

作成イメージは以下のようになります。 f:id:koruneko:20200723170547p:plain

作成が完了したら、「設定」より外部のユーザーもアクセスができるように、「リンクにアクセスできるすべてのユーザーが回答可能」を選択します。

f:id:koruneko:20200723170329p:plain

以上で作成は完了です!

Power Automate でフローを作成する

Power Automate を利用して、先ほど作成したForms に回答が送信されると、上で作成した「Azure Automation」が起動するようにしましょう!

  1. フローを新規作成し、トリガーにForms の「新しい応答が送信されるとき」を選択してください。
    フォームIDには先ほど作成したForms を選択します。
    f:id:koruneko:20200723171122p:plain

  2. Forms の回答内容を取得します。「応答の詳細を取得する」を選択し、以下のように入力します。
    f:id:koruneko:20200723171337p:plain

  3. 「Azure Automation」より、「ジョブの作成」を選択し、必要項目を入力します。
    f:id:koruneko:20200723171558p:plain

    • サブスクリプション:Azure Automation 作成時に使用したサブスクリプションと同様のものを選択
    • リソースグループ:Azure Automation 作成時に使用したサブスクリプションと同様のものを選択
    • Automation アカウント:先ほど作成したAutomation アカウントを選択
    • Runbook 名:先ほど作成したPowerShell Runbook を選択
    • ジョブの待機:今回は必要ないので「いいえ」を選択
    • Runbook Parameter:作成したパラメーターがこちらに表示されます。それぞれ対応するものを選択し、入力します。

以上で完成です!
お疲れさまでした!!

不明点やアドバイスなどありましたらコメントにてお願いします。


スポンサードリンク