【Teams】指定のチームの有効期限を設定する【PowerShell】

2019年8月16日

こんにちは。
先日TwitterでTeamsに有効期限設定ができる!との話が上がっているのを見かけました。
なので、今回は有効期限を設定するためのスクリプトを組んでみました。
それでは行きましょう。

前提条件

・PowerShell 5.0以降($PSVersionTable>PSVersion)
・.NetFramework 4.5.2 以降
・OS: Windows 7 SP1、 Windows Server 2008 R2 以降
・AADP1以上のディスクリプション

*AADP1以上のディスクリプションが付与されていないテナントでは、
有効期限設定自体の機能が利用できませんので注意ください!

前処理

まず、有効期限ポリシーの設定をAADで行いましょう。
AAD > Dashboard > Groups > Expirationと遷移します。

任意の値で有効期限とオーナーがいない場合の連絡先を登録しましょう。
[Enable expiration for these Office 365]はSelectedにしておきましょう。
→設定しないとスクリプトでエラーが発生します。
 最初に1つだけ手動で設定しなければSelectedになりません。

スクリプトコード

実行すると、以下のようになります。
ポップアップではテナント管理者を入力してください。

実行結果

AADにもちゃんと登録されていました。

解説

まず、Microsoft.Exchangeに対してセッションを張ります。
これはGet-UnifiedGroupコマンドでTeamsのO365グループを取得するためです。
Get-Teamsでもチームを取得することはできますが、
実行アカウントが所属しているチームしか取得できません。

次にAzureADのモジュールを読み込みます。
有効期限ポリシーはAAD側の設定ですので必須ですね。

  # Exchangeに接続
    try{
        Write-Host "Exchangeへ接続を行います。" -BackgroundColor Green -ForegroundColor Black
        $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $Credential -Authentication Basic -AllowRedirection
        $SessionId = Import-PSSession $Session -DisableNameChecking
    }catch{
        $ErrorMessage = $_.Exception.Message
        throw "Failed connect to MicrosoftExchange. `r`nPlease check the following error. `r`n $($ErrorMessage)"
    }

    # Graph APIでADに接続
    Install-Module -Name AzureAD
    Connect-AzureAD -Credential $Credential

そして、有効期限ポリシーの設定コマンド「Add-AzureADMSLifecyclePolicyGroup」を実行していきます。
そのために有効期限ポリシーのID情報、設定するチームのID情報。
この2つを取得しておきます。

 有効期限ポリシーのID情報 → $PolicyId
 設定するチームのID情報 → $TargetTeam.ExternalDirectoryObjectId

因みに、$TargetTeam.ExternalDirectoryObjectIdは、
Get-Teamsで取得したオブジェクト内のGroupIdと同等の値です。

   # 有効期限ポリシー適用処理
    Write-Host "有効期限ポリシー適用処理を行います。" -BackgroundColor Green -ForegroundColor Black
    $PolicyId = (Get-AzureADMSGroupLifecyclePolicy).Id
    $TargetTeam = Get-UnifiedGroup -ResultSize Unlimited | where {$_.DisplayName -eq $TargetTeamsName} 
    Add-AzureADMSLifecyclePolicyGroup -GroupId $TargetTeam.ExternalDirectoryObjectId -Id $PolicyId -ErrorAction SilentlyContinue

そして最後にセッションを削除して終わりです!

  # セッション削除
    Get-PSSession | %{Remove-PSSession $_.Id}
    Disconnect-AzureAD

補足情報

設定が完了して期限が30日まで迫ると、
以下のようにチームに通知が表示されます。

チームの設定を見てみると・・・
チームの有効期限を更新することができます。

更新も正常にできました。
でも1日しか更新されない・・・(笑)

終わりに

今回はちょっと複雑ですのでよく注意して利用ください。
保証はできませんよ!
大企業などTeamの乱立が目立つ会社では非常に有用な機能なので、
ぜひご利用してみてください。

それではまた。