前回の記事で、PowerSell を利用して Microsoft Teams にチームを作成し、合わせて必要な設定を行うといった方法を紹介しました。

PowerShell を使って Microsoft Teams のチームを作成するついでにチームのゲスト共有を無効化する
https://idea.tostring.jp/?p=5887

このように、Microsoft 365 の管理のために PowerShell を利用している管理者の方も多くいると思いますが、PowerShell を実行するためにはパソコンが必要になります。

しかしながら、場合によっては外出先から実行したり、SharePoint Online のリストや Microsoft Forms のフォームから送信されたデータなどを基に、パソコンの状態に関わらずいつでも自動実行させたいといったこともあるかもしれません。

そこで今回は、前回の記事で作成したPowerShell を基に、それをクラウド上で実行可能な Azure Automation を利用し、さらに、Power Automate からそれを呼び出すことで、どこからでも簡単に PowerShell を実行する方法を書き留めておきたいと思います。

なお、Power Automate から Azure Automation を呼び出すためのコネクタはプレミアムコネクタとなっているため、Power Automate の有償ライセンスの利用が必要です。

Azure Automation に PowerShell を設定する

まずは、Azure Automation を設定していきましょう。

Azure アカウントを追加する

Azure ポータルからサービスを検索し、「Automation アカウント」を開きます。はじめての場合はアカウントが作成されていませんので、[新規] からアカウントを作成していきましょう。

アカウントを作成したら次の手順の準備は完了です。

PowerShell で利用する資格情報を登録する

今回実行したい PowerShell では、Connect-MicrosoftTeamsConnect-AzureAD に資格情報を渡す必要があります。コマンドのパラメータで渡すこともできますが、平文で書いておきたくないため資格情報として登録しておきます。

先ほど作成した Automation アカウントのリソース画面に移動したら、「共有リソース」になる「資格情報」を開きましょう。ここでは [資格情報の追加] から PowerShell 内で利用するアカウントのユーザー名とパスワードのセットに名前を付けて登録できます。

分かりやすい名前を付けておきましょう。

必要な PowerShell モジュールを追加する

もう少しだけ準備が必要です。今回の PowerShell では、Microsoft Teams と Azure AD Preview のそれぞれの PowerShell モジュールが必要なのですが、それらを Azure Automation から実行できるようにするため、登録しておく必要があります。

ここでは、「共有リソース」の「モジュールギャラリー」を開きましょう。ギャラリーの一覧から、「MicrosoftTeams」と「AzureADPreview」をそれぞれ検索し、見つかったモジュールを [インポート] します。

これで Azure Automation からそれぞれの PowerShell モジュールを利用可能になりました。

PowerShell の Runbook を追加する

次はいよいよ PowerShell を実行するためのRunbook を追加していきます。「プロセス オートメーション」から「Runbook」を開きます。いくつかチュートリアル用のものが登録されていますが、今回は新しく作成するので [Runbook の作成] をクリックしましょう。

分かりやすい名前を付けて、「Runbook の種類」としては「PowerShell」を選択しましょう。

[作成] をクリックします。

PowerShell を編集する

すると、真っ白の PowerShell 編集画面が出てきますので、ここに次のように書いていきます。前回の記事のものと見比べてみると違うところが分かりやすいと思います。

Param
(
    [Parameter (Mandatory= $true)]
    [String] $DisplayName = '',

    [Parameter (Mandatory= $true)]
    [String] $MailNickName = '',

    [Parameter (Mandatory= $true)]
    [String] $Owner = '',

    [Parameter (Mandatory= $false)]
    [String] $Visibility = 'private'
)
#テナントへ接続
$credential = Get-AutomationPSCredential -Name "M365ADMIN"
Connect-MicrosoftTeams -Credential $credential
Connect-AzureAD -Credential $credential

#チームの作成
$team = New-Team -DisplayName $DisplayName -MailNickName $MailNickName -Owner $Owner -Visibility $Visibility

#ゲスト招待の無効化
$template = Get-AzureADDirectorySettingTemplate | ? {$_.displayname -eq "group.unified.guest"}
$setting = $template.CreateDirectorySetting()
$setting["AllowToAddGuests"] = "False"
New-AzureADObjectSetting -TargetType Groups -TargetObjectId $team.GroupId -DirectorySetting $setting

#テナントから切断
Disconnect-MicrosoftTeams
Disconnect-AzureAD

まずポイントとなるのは、上部に記載された Param のところです。ここで、Power Automate から呼び出すときに渡せる値の種類を定義しておくことができます。Mondatory$true となっているものは必須のプロパティ、$Visibility のように任意のプロパティの場合には $Visibility = 'private' のように記載して既定値を設定しておきましょう。

先ほど登録した資格情報は、Get-AutomationPSCredential -Name "M365ADMIN" のように呼び出すことができますので、こちらを Connect-MicrosoftTeamsConnect-AzureAD に資格情報として渡してあげます。

書いたら忘れずに [保存] しておきましょう。

PowerShell をテストする

書いた PowerShell が正しく実行できるかをテストしましょう。上部の [テスト ウィンドウ] を開きます。設定したパラメータを手入力し、[開始] をクリックしましょう。

実行結果を確認し、上手く実行できたかを確かめてください。

Runbook を公開する

上手く実行ができたら、Power Automate から利用できるように [公開] しておきましょう。

これで Azure Automation の設定は完了です。

Power Automate から Azure Automation を呼び出す

さて、それでは Power Automate から呼び出して利用してみましょう。「Azure Automation」コネクタを検索し、「ジョブの作成」アクションを追加します。「サブスクリプション」「リソースグループ」「Automation アカウント」「Runbook 名」を先ほど作成したものに合わせて設定します。

ちゃんと作成できていれば、先ほど設定したパラメータなどの入力項目が追加されます。「ジョブの待機」については「はい」を選択することで、このアクションが PowerShell の実行完了まで待機することになります。

もしも PowerShell の実行結果を利用したい場合には、「ジョブの出力を取得します」アクションが利用できます。

必要に応じて利用していきましょう。

フローのサンプル

たとえば次のように、Microsoft Forms でチーム作成申請フォームを作成しておき、そこから送信された情報を基にチームを作成するようなこともできます。実際の運用では、ジョブの出力を上手く利用してエラー処理などを行うとベストかと思います。

これでユーザーからの申請をAzure Automation と Power Automate を利用して自動処理できるようになります。

さいごに

Microsoft 365 の管理者にとって、PowerShell を利用して管理ができることはとても便利なものですが、今回のように Azure Automation と Power Automate を組み合わせることで、さらにいろいろな用途で利用できるようになります。

仕組みのパターンとして覚えておくと応用が利くものだと思いますので、興味がありましたら一度試してみてください。