在对某些集成脚本执行特定操作之前,可能有必要检查Microsoft团队中用户的存在状态(在线/外出/忙)。让我们看一下如何使用Microsoft Graph API和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
可用的存在状态:
- 可用性:可用,忙碌,离开,离线
- 活动:可用,Inacall,Donotdisturb,InaconFerenceCall,Away,affwork,berightback
您可以列出租户中所有用户的团队在场状态:
$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
如果您想从脚本中获得团队中的用户状态,请创建一个新应用(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时,您必须提供一个用户ID(ObjectID,用户对象GUID),而不是用户principalname(UPN)。
$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读取或发送消息给团队聊天。
如何从PowerShell改变团队的存在状态
您可以使用PowerShell和Graph API来更改用户在团队中的存在状态。如上图所示,使用图形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"
检查团队中的用户状态是否发生了变化:
Get-MgCommunicationPresence -PresenceId $UserId