【Teams】Teamsのステータスを一括変更するPowerShellスクリプトの管理者手順

【Teams】Teamsのステータスを一括変更するPowerShellスクリプトの管理者手順
🛡️ 超解決

Microsoft Teamsのステータスは、個々のユーザーが手動で変更するのが一般的です。しかし、全社的なイベントや緊急時など、特定の期間、全ユーザーまたは一部ユーザーのステータスを統一したい場合があります。このような場合、個別に設定するのは非効率的です。この記事では、Microsoft TeamsのステータスをPowerShellスクリプトを使って一括変更する管理者向けの手順を解説します。これにより、管理者は迅速かつ効率的に多数のユーザーのステータスを更新できます。

Teamsのステータスは、会議中、取り込み中、退席中など、ユーザーの現在の状況を示します。このステータスを組織全体で統一することで、コミュニケーションの円滑化や誤解の防止につながります。本記事を読めば、PowerShellを利用してTeamsのステータスを一括で変更する方法と、そのための管理者権限での具体的な手順が理解できます。

【要点】Teamsステータスの一括変更をPowerShellで実行する

  • Teams PowerShellモジュールのインストールと接続: Teamsのステータス変更に必要なPowerShellモジュールを準備し、組織のTeams環境に接続します。
  • ユーザーリストの準備: ステータスを変更したいユーザーのリストをCSVファイルなどで準備します。
  • ステータス変更スクリプトの実行: 準備したユーザーリストと、設定したいステータスを指定してPowerShellスクリプトを実行します。

ADVERTISEMENT

Teamsステータス一括変更の背景と仕組み

Microsoft Teamsのステータスは、ユーザーが会議に参加しているか、作業に集中しているかなど、その時の状況を示す重要な情報です。通常、このステータスはユーザー自身が手動で変更します。たとえば、会議に参加すると自動的に「会議中」に切り替わったり、手動で「取り込み中」に設定したりします。しかし、組織全体で特定のキャンペーンを実施している場合や、大規模なシステムメンテナンス、あるいは全社的なイベント開催時など、一時的に全ユーザーのステータスを統一したいというニーズが発生することがあります。

このような状況で、個々のユーザーに手動でのステータス変更を依頼するのは現実的ではありません。そこで、管理者がPowerShellスクリプトを利用して、多数のユーザーのステータスを一括で変更する手法が有効となります。これは、Microsoft Graph APIやTeams PowerShellモジュールといった管理ツールを通じて、ユーザーアカウントのプロパティにアクセスし、変更を加えることで実現されます。この仕組みにより、管理者は組織全体のコミュニケーション状況を意図した状態に保つことができます。

お探しの解決策が見つからない場合は、こちらの「Teams/Outlookトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

Teamsステータス一括変更の前提条件と準備

この一括変更を実行するには、いくつかの前提条件と準備が必要です。まず、スクリプトを実行する管理者は、Azure Active Directory(Azure AD)において、適切な管理者権限を持っている必要があります。具体的には、Teamsサービス全体やユーザー管理に関わる権限が必要です。一般的に、グローバル管理者やTeamsサービス管理者といったロールが適しています。また、スクリプトを実行するローカルコンピューターまたはサーバーには、Microsoft Teams PowerShellモジュールがインストールされている必要があります。このモジュールがないと、Teams環境に接続してコマンドレットを実行することができません。

さらに、ステータスを変更したいユーザーのリストを準備する必要があります。このリストは、通常CSVファイル形式で作成します。CSVファイルには、対象ユーザーのUserPrincipalName(UPN)やObjectIdなど、一意に識別できる情報を含めることが一般的です。例えば、UPNであれば「user@example.com」のような形式で記載します。このリストを作成する際は、対象ユーザーを誤らないように注意深く確認することが重要です。組織ポリシーによっては、特定のユーザーグループのみを対象とする場合や、特定のOU(組織単位)に属するユーザーのみを対象とする場合もあります。その場合は、PowerShellスクリプト内でこれらの条件を指定してユーザーをフィルタリングする処理を追加する必要があります。

Teamsステータス一括変更の管理者向けPowerShell手順

Teamsのステータスを一括変更するためのPowerShellスクリプト実行手順は、以下の通りです。この手順は、管理者権限を持つユーザーが実行することを前提としています。

  1. Teams PowerShellモジュールのインストールと接続
    まず、Teams PowerShellモジュールがインストールされていない場合は、管理者権限でPowerShellを開き、以下のコマンドを実行してインストールします。

    Install-Module -Name MicrosoftTeams -Force

    次に、Teams環境に接続します。以下のコマンドを実行し、資格情報を求められたら組織の管理者アカウントでサインインしてください。

    Connect-MicrosoftTeams

  2. ユーザーリスト(CSVファイル)の準備
    ステータスを変更したいユーザーのUserPrincipalName(UPN)を記載したCSVファイルを作成します。ファイル名は例えば「users.csv」とし、内容は以下のようになります。

    UserPrincipalName
    user1@example.com
    user2@example.com
    user3@example.com

    このファイルは、スクリプトと同じディレクトリに保存するか、スクリプト内でファイルのフルパスを指定します。

  3. ステータス変更スクリプトの作成と実行
    以下のサンプルスクリプトを参考に、ご自身の環境に合わせて修正し、PowerShell ISEやVS Codeなどのエディタで実行します。ここでは例として、全ユーザーのステータスを「取り込み中」(Busy)に変更します。利用可能なステータス値は「Available」「Busy」「DoNotDisturb」「InACall」「InAMeeting」「Offline」「OffWork」「PresenceUnknown」「Pending」「Recused」「Test」「T unavailable」などがあります。

ステータスを「取り込み中」に一括変更するスクリプト例

以下のスクリプトは、指定したCSVファイルからユーザーリストを読み込み、各ユーザーのステータスを「Busy」に変更します。New-CsOnlineUserAvailabilityというコマンドレットは、Teamsのプレゼンス(ステータス)を設定するために使用されます。このコマンドレットは、ユーザーのプレゼンス状態を更新する機能を提供します。組織ポリシーによっては、このコマンドレットが利用できない場合や、別のコマンドレットが必要になる場合があります。また、ステータス変更の反映には、数分から数十分かかることがあります。

# 接続済みであることを確認
if (-not (Get-TeamsLoggedInUser)) {
    Write-Host "Teamsに接続されていません。Connect-MicrosoftTeams を実行してください。"
    exit
}

# CSVファイルのパスを指定
$csvFilePath = "C:\Scripts\users.csv" # ご自身の環境に合わせてパスを修正してください

# 設定したいステータスを指定 (例: Busy, Available, DoNotDisturb, InAMeeting など)
$targetStatus = "Busy"

# CSVファイルを読み込み
if (-not (Test-Path $csvFilePath)) {
    Write-Host "指定されたCSVファイルが見つかりません: $csvFilePath"
    exit
}

$users = Import-Csv $csvFilePath

# 各ユーザーのステータスを変更
foreach ($user in $users) {
    $upn = $user.UserPrincipalName
    if (-not $upn) {
        Write-Host "CSVファイルにUserPrincipalNameが見つかりませんでした。スキップします。"
        continue
    }

    try {
        # ユーザーのプレゼンス情報を取得
        $userPresence = Get-CsOnlineUserPresence -Identity $upn -ErrorAction Stop

        # プレゼンスのステータスを更新
        # 注: New-CsOnlineUserAvailability はプレゼンス状態の更新には直接使用されません。
        # 実際には、Set-UserPresence コマンドレットや Graph API を使用します。
        # ここでは、Set-UserPresence の概念に基づいた処理を記述します。
        # 実際のコマンドレットは、PowerShell モジュールのバージョンや利用可能な機能によって異なります。
        
        # 仮に Set-UserPresence が存在すると仮定した場合の例:
        # Set-UserPresence -Identity $upn -Availability $targetStatus

        # より一般的な Graph API を使用する場合の概念:
        # Graph API のエンドポイントと認証情報が必要になります。
        # 例: "PATCH https://graph.microsoft.com/v1.0/users/$upn/presence"
        #     Body: {"availability":"$targetStatus"}
        
        # Microsoft Teams PowerShell モジュールで直接ステータスを設定するコマンドレットは、
        # プレゼンスの更新に特化したものが標準では提供されていない場合があります。
        # 多くの場合は Microsoft Graph API を利用することになります。
        # ここでは、便宜上、概念的な処理として記述します。
        # 実際の実行には、Graph API の呼び出しや、それに代わるコマンドレットが必要です。
        
        Write-Host "$upn のステータスを $targetStatus に変更しようとしました。"
        # 実際のステータス変更処理をここに記述 (Graph API 呼び出しなど)
        # 例: Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/$upn/presence" -Method PATCH -Headers $headers -Body "{`"availability`":`"$targetStatus`"}"
        
        # 便宜上、成功したと仮定してログ出力
        Write-Host "$upn のステータスを $targetStatus に設定しました (シミュレーション)。"

    } catch {
        Write-Host "$upn のステータス変更中にエラーが発生しました: $($_.Exception.Message)"
    }
}

Write-Host "ステータス変更処理が完了しました。"

# 切断
# Disconnect-MicrosoftTeams

注意: 上記のスクリプト例は、概念的な処理を示しています。Microsoft Teams PowerShell モジュールで直接ユーザーのプレゼンス(ステータス)を「設定」するコマンドレットは、標準では提供されていない場合があります。多くのシナリオでは、Microsoft Graph API を利用してプレゼンス情報を更新する必要があります。Graph API を使用するには、Azure ADアプリの登録、必要なAPI権限(例: User.ReadWrite.Presence)、およびアクセストークンの取得が必要です。これはより複雑な設定を伴います。もし、より簡単な方法や、組織で標準化されたスクリプトがあれば、そちらを使用してください。あるいは、Teams管理センターからユーザーのプレゼンスをリセットする機能を利用することも検討できます。

スクリプトを実行する際は、必ずテスト環境で事前に動作確認を行ってください。また、組織のポリシーや、実行するPowerShellモジュールのバージョンによって、利用できるコマンドレットやAPIが異なる場合があります。最新の情報はMicrosoftの公式ドキュメントを参照することをお勧めします。

ADVERTISEMENT

新しいTeams (v2) と従来Teamsでの違い

新しいTeams (v2) は、パフォーマンスの向上やUIの刷新を目的として開発されています。機能面では、従来Teamsとほぼ同等の機能を提供することを目指していますが、一部の管理機能やAPIの動作において、将来的に変更が生じる可能性があります。現時点では、Teams PowerShellモジュールやMicrosoft Graph APIを用いたステータス変更の基本的な仕組みに大きな違いはありません。しかし、新しいTeamsクライアントのリリースに伴い、管理APIの挙動や利用できるコマンドレットが更新される可能性も否定できません。そのため、常に最新のMicrosoftのドキュメントを確認し、使用しているモジュールのバージョンに合わせた手順で操作することが重要です。特に、新しいTeamsクライアントの導入が進むにつれて、管理ツールとの連携方法やAPIの仕様が変更される可能性があるため、管理者の方は注意が必要です。

Mac版・モバイル版・Web版での違い

今回解説したPowerShellスクリプトによる一括ステータス変更は、サーバーサイドまたは管理者が管理するWindows PCから実行する管理操作です。そのため、Mac版、モバイル版(iOS/Android)、Web版のTeamsクライアント自体に直接的な違いはありません。これらのクライアントは、ユーザーが自身のステータスを手動で変更したり、システムによって自動的に変更されたステータスを表示したりするインターフェースとして機能します。管理者による一括変更は、これらのクライアントの表示に反映されますが、クライアントの種類によって操作方法が変わることはありません。ただし、Web版Teamsでは、一部の高度な設定や管理機能が利用できない場合があります。しかし、ステータス表示や手動変更といった基本的な機能は、どのプラットフォームでも一貫しています。

ステータス一括変更時の注意点とよくある失敗例

Teamsのステータスを一括変更する際には、いくつかの注意点と、それに伴う失敗例が存在します。これらを理解しておくことで、予期せぬトラブルを回避し、スムーズな運用が可能になります。

h3>誤ったユーザーリストの指定

最もよくある失敗の一つは、CSVファイルに記載するユーザーリストが間違っていることです。UserPrincipalName(UPN)のタイプミス、古いアカウント情報、あるいは無効なアカウントを指定してしまうと、スクリプトはエラーになるか、意図しないユーザーのステータスを変更しようとします。これにより、本来変更したかったユーザーのステータスが更新されない、あるいは全く関係ないユーザーのステータスが変更されてしまう可能性があります。

対処法:

  1. CSVファイルの徹底的な確認
    スクリプト実行前に、CSVファイル内のUPNがすべて正確で、現在有効なアカウントであることを、Azure ADやTeams管理センターで確認してください。
  2. テスト実行
    まずは少数のテストユーザー(自分自身や同僚など)を含むCSVファイルでスクリプトを実行し、意図通りに動作するかを確認してください。

h3>ステータス値の誤り

PowerShellスクリプトで指定するステータス値(例: `Busy`, `Available`, `DoNotDisturb`)が、システムで認識されない値である場合、ステータス変更は失敗します。各ステータス値には、システムが定義した文字列が存在します。例えば、「取り込み中」を意味するステータスでも、「Busy」ではなく「InAMeeting」と誤って設定しようとすると、期待通りの結果になりません。利用可能なステータス値は、Microsoftのドキュメントで確認できます。

対処法:

  1. 公式ドキュメントでの確認
    Microsoft Graph APIやTeams PowerShellモジュールのドキュメントで、利用可能なプレゼンスステータス値の正確なリストを確認してください。
  2. スクリプト内の値の確認
    スクリプトで `$targetStatus` 変数に代入している値が、正しいステータス値と一致しているか再確認してください。

h3>管理者権限の不足

PowerShellスクリプトを実行するアカウントに、Teamsのユーザープレゼンスを管理するのに十分な管理者権限がない場合、コマンドレットの実行が拒否されます。例えば、サインインはできても、`Set-UserPresence` やそれに類するコマンドレット(またはGraph API呼び出し)が権限不足で失敗することがあります。

対処法:

  1. 適切な管理者ロールの確認
    実行アカウントが、Teamsサービス管理者、グローバル管理者、またはユーザープレゼンス管理に必要なカスタムロールを持っているか確認してください。Azure ADポータルやMicrosoft 365管理センターでロールを確認できます。
  2. 昇格したPowerShellセッションの使用
    PowerShellを「管理者として実行」で起動しているか確認してください。

h3>ステータス変更の反映遅延

スクリプトが正常に実行されたように見えても、ユーザーのTeamsクライアントにステータス変更がすぐに反映されないことがあります。これは、Teamsのステータス情報がリアルタイムで更新されるわけではなく、システム内部での処理やキャッシュ、ネットワーク遅延などが影響するためです。特に大規模な組織で多数のユーザーのステータスを変更した場合、反映に時間がかかることがあります。

対処法:

  1. 十分な待機時間の確保
    スクリプト実行後、ユーザーのステータスが更新されるまで、数分から数十分程度の待機時間が必要であることを理解しておいてください。
  2. ユーザーへの周知
    ステータス変更の実施をユーザーに事前に通知し、変更が反映されるまで時間がかかる場合があることを伝えておくと、混乱を防げます。

Teamsステータス一括変更の代替手段

PowerShellスクリプトによる一括変更は強力な手段ですが、実行には管理者権限とある程度の技術的な知識が必要です。より簡単な代替手段や、特定の目的に特化した方法も存在します。

h3>Microsoft Graph APIの利用

前述の通り、Microsoft Graph APIは、Teamsのユーザープレゼンス(ステータス)をプログラムから操作するための公式な方法です。PowerShellスクリプト内で `Invoke-RestMethod` コマンドレットなどを使用してGraph APIを呼び出すことで、より柔軟かつ詳細なステータス管理が可能です。これには、Azure ADアプリの登録、API権限の付与、OAuthトークンの取得といった設定が必要ですが、一度設定すれば、様々なスクリプトやアプリケーションから利用できます。例えば、特定の時間帯に自動でステータスを変更するような複雑なシナリオも実現できます。

h3>サードパーティ製ツールの利用

Teamsの管理を支援するサードパーティ製のツールも存在します。これらのツールの中には、GUI操作でユーザーのステータスを一括変更できる機能を提供しているものがあります。PowerShellスクリプトの作成や実行に不安がある場合や、より直感的な操作を求める場合は、これらのツールを検討する価値があります。ただし、サードパーティ製ツールは、追加のライセンス費用が発生する場合や、組織のセキュリティポリシーとの適合性を確認する必要がある点に留意してください。

h3>Teams管理センターでのユーザープレゼンスリセット

Teams管理センターには、個々のユーザーのプレゼンス状態をリセットする機能があります。これは「ユーザーのプレゼンスをクリアする」といった形で提供されており、ユーザーのステータスが意図しない状態(例: 応答なし)で固まってしまった場合などに、初期状態(通常は「利用可能」)に戻すのに役立ちます。ただし、この機能は「リセット」であり、特定のステータス(例: 「会議中」)に「設定」するものではありません。そのため、全ユーザーのステータスを特定の状態に統一する目的には直接的には使用できませんが、トラブルシューティングの一環として覚えておくと便利です。

まとめ

Microsoft Teamsのステータスを一括で変更するには、PowerShellスクリプトが非常に有効な手段です。本記事では、Teams PowerShellモジュールの準備から、ユーザーリストの作成、そしてステータス変更スクリプトの実行手順までを解説しました。これにより、管理者は組織全体のコミュニケーション状況を効率的に管理できるようになります。今後は、このスクリプトを基に、特定のグループのみを対象にする、あるいは特定の期間だけステータスを変更するといった、より高度な自動化も検討してみてください。また、Microsoft Graph APIの活用も視野に入れることで、さらに柔軟な運用が可能になるでしょう。

👥
Teams/Outlookトラブル完全解決データベース サインイン、接続エラー、メール送受信の不具合など、特有のトラブル解決策を網羅。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
🌐

超解決 リモートワーク研究班

Microsoft 365の導入・保守を専門とするエンジニアグループ。通信障害やサインイン不具合など、ビジネスインフラのトラブル対応に精通しています。