【问题标题】:Change status of Lync by script通过脚本更改 Lync 的状态
【发布时间】:2013-04-19 07:09:39
【问题描述】:

是否可以通过脚本更改 Microsoft Lync 2010 的状态?

我想要在 Win XP 上运行的脚本,并在固定间隔后将状态更改为可用。尝试在互联网上搜索,但没有成功找到。

【问题讨论】:

    标签: lync-2010


    【解决方案1】:

    根据文档,Lync 二进制文件does not offer 具有该功能。但是,您可以使用 Lync SDK 通过编写一个小型帮助应用程序(或将相关代码合并到您当前的应用程序中)来实现您想要的。

    根据Microsoft forums 中的 MVP,这也不是开箱即用的。

    但是,根据文档,像这样的 PowerShell 脚本应该能够做到这一点:

    import-module "C:\Program Files (x86)\Microsoft Lync\SDK\Assemblies\Desktop\Microsoft.Lync.Controls.Dll"
    
    $availability = [Microsoft.Lync.Controls.ContactAvailability]::Available
    
    $contactInfo = new-object 'System.Collections.Generic.Dictionary[Microsoft.Lync.Model.PublishableContactInformationType, object]'
    $contactInfo.Add([Microsoft.Lync.Model.PublishableContactInformationType]::Availability, 
                    $availability)
    
    $ar = $self.BeginPublishContactInformation($contactInfo, $null, $null)
    $self.EndPublishContactInformation($ar)
    

    此脚本需要安装 Lync SDK 或 Lync SDK 可再发行组件。

    大部分信息取自here

    【讨论】:

    • Lync 很烂。虽然这可行,但一旦 PC 被锁定和不活动,它将被忽略,来自 MSDN:当本地用户一段时间未触摸键盘或鼠标时,Lync 2013 客户端会覆盖这些以编程方式设置的可用性值。
    【解决方案2】:

    上面的帖子不起作用。需要更多的 DLL 模块。但是我在下面进行了以下更改,因此可以正常工作。然后你可以使用 TaskSch 让它自动运行。仍然需要安装 2010 Lync SDK。

    将 15550 设置为“下班”而不是“离开”。更有用。

    见 - http://blogs.technet.com/b/heyscriptingguy/archive/2012/08/11/weekend-scripter-use-the-windows-task-scheduler-to-run-a-windows-powershell-script.aspx

    请注意,此代码不会检查 LYNC 是否已登录。如果不是,则不会运行。

    import-module "C:\Program Files (x86)\Microsoft Lync\SDK\Assemblies\Desktop\Microsoft.Lync.Controls.Dll"
    import-module "C:\Program Files (x86)\Microsoft Lync\SDK\Assemblies\Desktop\Microsoft.Lync.Model.Dll"
    
    # Obtain the entry point to the Lync.Model API
    $client = [Microsoft.Lync.Model.LyncClient]::GetClient()
    
    $self = $client.Self;
    
    #Set Details of Personal Note and Availability
    #Useful availability codes for use below - 3500 Available, 15500 Away (converted to "Off Work" in this script by setting activity ID), 6500 Busy, 9500 Do not disturb, 12000 Be Right Back) 
    $availability = 3500
    $date = [DateTime]::Now
    $message = "Remote Work. UK Time +5 hours EST (US), -5.5 IST (India). Availability script last run $date"
    
    #Publish personal note and presence availability of the local user
    $contactInfo = new-object 'System.Collections.Generic.Dictionary[Microsoft.Lync.Model.PublishableContactInformationType, object]'
    $contactInfo.Add([Microsoft.Lync.Model.PublishableContactInformationType]::PersonalNote, 
                $message)
    $contactInfo.Add([Microsoft.Lync.Model.PublishableContactInformationType]::Availability, 
                $availability)
    If ($availability -eq 15500) {$contactInfo.Add([Microsoft.Lync.Model.PublishableContactInformationType]::ActivityId, 
                "off-work")}
    
    $ar = $self.BeginPublishContactInformation($contactInfo, $null, $null)
    $self.EndPublishContactInformation($ar)
    

    【讨论】:

    • 2013 Lync SDK - DLL 位于 C:\Program Files (x86)\Microsoft Office\Office15\LyncSDK\Assemblies\Desktop\
    【解决方案3】:

    好的 - 这就是我所做的

    1. 安装 2013 SDK(顺便说一句,这也适用于 Skype for Business)
    2. 使用上述 Pete 的代码,除了将程序集目录更改为 C:\Program Files (x86)\Microsoft Office\Office15\LyncSDK\Assemblies\Desktop\ 之外
    3. 我必须为每个页面添加配置文件(以管理员身份运行http://tfl09.blogspot.com/2010/08/using-newer-versions-of-net-with.html
    4. 更改 Pete 脚本中的消息
    5. 使用任务计划程序自动化.ps1 脚本

    【讨论】:

    • 另外,如果您使用 .ps1 作为 Visual Studio 后期构建操作,请确保正确设置了 powershell x86 版本的执行策略。
    【解决方案4】:

    对于 Lync 2013,此 PowerShell 脚本有效。您需要先安装Lync 2013 SDK。 SDK 安装程序可能会说您需要安装 Silverlight 4,但不必担心,没有必要。

    Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process -Confirm:$false
    Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Confirm:$false
    
    Import-Module "C:\Program Files\Microsoft Office\Office15\LyncSDK\Assemblies\Desktop\Microsoft.Lync.Model.dll"
    Import-Module "C:\Program Files\Microsoft Office\Office15\LyncSDK\Assemblies\Desktop\Microsoft.Lync.Controls.dll"
    
    $client = [Microsoft.Lync.Model.LyncClient]::GetClient()
    
    $availability = [Microsoft.Lync.Controls.ContactAvailability]::Away
    
    $contactInfo = (New-Object "System.Collections.Generic.Dictionary[Microsoft.Lync.Model.PublishableContactInformationType,object]") -As "System.Collections.Generic.IEnumerable[System.Collections.Generic.KeyValuePair[Microsoft.Lync.Model.PublishableContactInformationType,object]]"
    $contactInfo.Add([Microsoft.Lync.Model.PublishableContactInformationType]::Availability, $availability)
    
    $ar = $client.Self.BeginPublishContactInformation($contactInfo, [System.AsyncCallback]$null, [object]$null)
    $client.Self.EndPublishContactInformation($ar)
    

    这会将状态设置为“消失”,但您可以将[Microsoft.Lync.Controls.ContactAvailability]::Away 更改为此[Microsoft.Lync.Controls.ContactAvailability]::None 以重置状态。

    【讨论】:

    • +一个...终于有人链接到这个想法的关键部分(SDK!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多