一部の統合スクリプトで特定のアクションを実行する前に、Microsoft Teams でのユーザーのプレゼンス ステータス (オンライン/退席中/取り込み中) を確認する必要がある場合があります。 Microsoft Graph API と PowerShell を使用して、Teams でユーザーのステータスを取得および変更する方法を見てみましょう。
コンテンツ:
もしMicrosoft.グラフモジュールがコンピューターにインストールされている場合は、アカウントを使用してテナントに接続します。
Connect-MgGraph -Scopes Presence.Read.All,User.Read.All
Microsoft.Graph がインストールされていない場合は、次のようにインストールできます。
Install-Module Microsoft.Graph -Scope AllUsers
ステータスを取得するユーザーの UPN を指定します。
$TeamsUser = Get-MGUser -Userid [email protected]
Get-MgCommunicationPresence -PresenceId $TeamsUser.Id | select Activity, Availability


利用可能なプレゼンス ステータス:
関連している:MS Teams の背景を変更する方法
- 可用性: 利用可能、話中、外出中、オフライン
- 活動: 利用可能、InACall、DoNotDisturb、InAConferenceCall、Away、OffWork、BeRightBack
テナント内のすべてのユーザーの Teams プレゼンス ステータスを一覧表示できます。
$allUserStatus = @()
$AllUsers=Get-MGUser
foreach ($TeamUser in $AllUsers)
{
$TeamsStatus=Get-MgCommunicationPresence -PresenceId $TeamUser.Id
$CurUserStatus = New-Object PSObject -Property @{
Activity=$TeamsStatus.Activity
Availability=$TeamsStatus.Availability
DisplayName=$TeamUser.DisplayName
}
$allUserStatus += $CurUserStatus
}
$allUserStatus


Teams のユーザーステータスをスクリプトから取得したい場合は、新しいアプリを作成し (Azure AD -> アプリ登録)、委任します。Presence.ReadWrite.Allそれに対する許可(またはPresence.ReadそしてPresent.Read.Allユーザーとしてアプリを実行するときの権限)。
テナントに接続してトークンを取得します。
$ApplicationID = "1111111-1111-1111-1111-11111111111"
$TenatDomainName = "2222222-2222-2222-2222-222222222222"
$AccessSecret = "3333333333333333333333333333333333333333333"
$Body = @{
Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
client_Id = $ApplicationID
Client_Secret = $AccessSecret
}
$ConnectGraph = Invoke-RestMethod -Uri https://login.microsoftonline.com/$TenatDomainName/oauth2/v2.0/token -Method POST -Body $Body
Microsoft Graph API を介して PowerShell から Azure にアクセスする方法の詳細を確認してください。
API 経由で Azure にアクセスする場合は、UserPrincipalName (UPN) の代わりにユーザー ID (ObjectId、ユーザー オブジェクト GUID) を指定する必要があります。
$UserId = "111111-2222-3333-4444-555555555"
$headers = @{
"Authorization" = "Bearer $($tokenResponse.access_token)"
"Content-type" = "application/json"
}
$ApiUrl = "https://graph.microsoft.com/v1.0/users/$UserId/presence"
$Response = Invoke-RestMethod -Method GET -Uri $ApiUrl -ContentType "application\json" -Headers $headers -SkipHeaderValidation
$Response
この Azure アプリを使用して、PowerShell を使用してメッセージを読んだり、Teams チャットにメッセージを送信したりすることもできます。
PowerShell から Teams のプレゼンス ステータスを変更する方法
PowerShell と Graph API を使用して、Teams でのユーザーのプレゼンス ステータスを変更できます。上に示すように、Graph API を使用して Azure に接続します。
次のスクリプトを使用して、ユーザー ステータスを 1 時間 (PT1H) 変更します。
$UserId = "111111-2222-3333-4444-555555555"
$uri = "https://graph.microsoft.com/beta/users/$userid/presence/setPresence"
$body = @"
{
"sessionId": "$ApplicationID",
"availability": "Away",
"activity": "Away",
"expirationDuration": "PT1H"
}
"@
Invoke-RestMethod –Uri $uri –Method Post –Body $body –Headers $headers -ContentType "application/json"
Teams のユーザーのステータスが変更されたことを確認します。
Get-MgCommunicationPresence -PresenceId $UserId

















