在 Powershell 中获取 Skype for Business 用户状态/可用性问题



我正在使用Powershell使用以下代码获取某些用户的状态/可用性:

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作为脚本参数。

如果我运行此脚本,它将返回"状态未知"。但是,如果我手动打开Skype客户端并搜索用户,则可以看到其可用性(假设此用户设置为"可用")。

现在,如果我在 Skype 中搜索脚本后再次运行脚本,脚本将通过将"可用"打印到控制台来返回正确的结果。脚本将不断返回正确的结果,直到我重新启动Skype。此时,它将再次返回"状态未知",直到我在Skype中搜索用户。

如果用户在 Skype 中的"最近对话"中,而我只是查看"最近的对话"选项卡而不是搜索它们,则足以让脚本开始返回正确的结果。

看起来好像无法查询它们的可用性,直到它从我的客户端手动加载到 cache(?) 中。知道为什么会发生这种情况,或者我如何让它返回正确的结果而无需先手动搜索用户吗?

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

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窗口在用户端弹出。

查看订阅解决方案的Powershell代码会很有趣

看起来您必须订阅用户状态信息。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 类似的解决方案

最新更新