Получить/изменить статус пользователя в Teams с помощью PowerShell

Для некоторых интеграционных скриптов мне нужно проверять статус пользователя в Microsoft Teams (Online/Away/Busy) прежде чем выполнить определенное действие. Рассмотрим, как получить и изменить статус пользователя в Teams с помощью Microsoft Graph API и PowerShell.

Узнать статус пользователя в Teams с помощью PowerShell

Если у вас на компьютере установлен модуль Microsoft.Graph , подключитесь к вашему тенанту с помощью вашей учетной записи:

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

Get-MgCommunicationPresence: проверить статус в Teams из PowerShell

Возможные статусы:

  • Availability: Available, Busy, Away, Offline
  • Activity: Available, InACall, DoNotDisturb, InAConferenceCall, Away, OffWork, BeRightBack

Можно вывести статус Teams для всех пользователей в тенанте:

$allUserStatus = @()_x000D_$AllUsers=Get-MGUser_x000D_foreach ($TeamUser in $AllUsers) _x000D_{ _x000D_$TeamsStatus=Get-MgCommunicationPresence -PresenceId $TeamUser.Id _x000D_$CurUserStatus = New-Object PSObject -Property @{_x000D_ Activity=$TeamsStatus.Activity_x000D_ Availability=$TeamsStatus.Availability_x000D_ DisplayName=$TeamUser.DisplayName_x000D_}_x000D_$allUserStatus += $CurUserStatus_x000D_}_x000D_$allUserStatus_x000D_

получить статус teams для всех пользователей

Если вам нужно получить статус пользователя в Teams из скрипта, создайте новое приложение (Azure AD -> App registration) и делегируйте ему права Presence.ReadWrite.All (или Presence.Read и Present.Read.All если приложение запускается от пользователя).

Подключитесь к вашем тетнанту и получите токен:

$ApplicationID = "46692ad-f8a0-123f-8cca-432102de3bcf"
$TenatDomainName = "26216542-465a-407e-a17d-2bb4c3e3313b"
$AccessSecret = "d-8jM3ZUG87du-syZd32k01q.gkssa3mH3v"
$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

Укажите ID пользователя (ObjectId, User Object GUID), т.к. в при обращении к API указывается именно он, а не UserPrincipalName (UPN).

_x000D_$UserId = "123445-2345-aaaa-bbbb-ccccccccc"_x000D_$headers = @{_x000D_ "Authorization" = "Bearer $($tokenResponse.access_token)"_x000D_ "Content-type" = "application/json"_x000D_ }_x000D_$ApiUrl = "https://graph.microsoft.com/v1.0/users/$UserId/presence"_x000D_$Response = Invoke-RestMethod -Method GET -Uri $ApiUrl -ContentType "applicationjson" -Headers $headers -SkipHeaderValidation_x000D_$Response _x000D_ 
Вы можете использовать это приложение Azure чтобы прочитать или отправить сообщение в чат Teams из помощью PowerShell .

Изменить статус в Teams из PowerShell

С помощью PowerShell и Graph API вы можете изменить статус пользователя в Teams. Подключитесь к Azure через Graph API как описано выше.

Чтобы изменить статус пользователя на 1 час (PT1H), нужно указать его ID и выполнить скрипт:

_x000D_$UserId = "123445-2345-aaaa-bbbb-ccccccccc"_x000D_$uri = "https://graph.microsoft.com/beta/users/$userid/presence/setPresence"_x000D_$body = @"_x000D_{_x000D_ "sessionId": "$ApplicationID",_x000D_ "availability": "Away",_x000D_ "activity": "Away",_x000D_ "expirationDuration": "PT1H"_x000D_ }_x000D_"@_x000D_Invoke-RestMethod –Uri $uri –Method Post –Body $body –Headers $headers -ContentType "application/json"_x000D_

Проверьте с помощью PowerShell что статус пользователя в Teams изменился:

Get-MgCommunicationPresence -PresenceId $UserId

изменить статус в teams из powershell

EnglishRussianUkrainian