在 Powershell 中获取 Skype for Business 用户 Status/Availability 问题

Get Skype for Business User Status/Availability issue in Powershell

我正在使用 powershell 通过以下代码获取某些用户的 Status/Availability:

Import-Module "C:\...\Microsoft.Lync.Model.dll"

$Client = [Microsoft.Lync.Model.LyncClient]::GetClient()

$Contact = $Client.ContactManager.GetContactByUri( $args[0] )
Write-Host $Contact.GetContactInformation("Activity")

假设我传入 testuser@testcompany.com 作为脚本参数。

如果我运行这个脚本,它会return"Presence unknown"。但是,如果我手动打开 Skype 客户端并搜索用户,我就可以看到他们的可用性(假设该用户设置为可用)。

现在,如果我在 Skype 中搜索它们后再次 运行 我的脚本,脚本将通过在控制台打印 "Available" 来 return 正确的结果。该脚本将持续 return 正确的结果,直到我重新启动 Skype。此时,它将再次 return "Presence unknown",直到我在 Skype 中搜索用户。

如果用户在我在 Skype 中的“最近的对话”中,而我只是查看“最近的对话”选项卡而不是搜索它们,这足以让脚本启动 return 获得正确的结果。

它似乎无法查询它们的可用性,直到它从我的客户端手动加载到缓存(?)中。知道为什么会发生这种情况,或者我如何在不先手动搜索用户的情况下获得 return 正确的结果?

看来您必须订阅用户状态信息。 Lync SDK MSDN 文档在 https://msdn.microsoft.com/en-us/library/office/jj937284.aspx 概述了解决方案。

https://social.msdn.microsoft.com/Forums/en-US/12357db7-769f-4808-bc99-9b2fb2ed8ce2/presence-unknown?forum=communicatorsdk

处的类似解决方案

我发现的唯一解决方法是创建与目标用户的对话,如下所示:

Import-Module "Microsoft.Lync.Model.dll"
$client = [Microsoft.Lync.Model.LyncClient]::GetClient()
$contact = $client.ContactManager.GetContactByUri($email)
$convo = $client.ConversationManager.AddConversation()
$convo.AddParticipant($contact) | Out-Null
Write-Host $contact.GetContactInformation("Activity")
$convo.End() | Out-Null

它似乎没有导致任何 IM windows 在用户端弹出。

看到订阅解决方案的 powershell 代码会很有趣