понедельник, 25 февраля 2013 г.

(не) Использование Distribution групп в Lync Response Group

Внезапно выяснилось и подтвердилось, что при создании групп дозвона Lync 2010, смотрящих на группы рассылки в AD, могут возникать проблемы с синхронизацией. Узнать об этом можно будет только из журнала Lync, наблюдая за событием 31128:

Data synchronization from Active Directory failed.

The following exception was thrown during the synchronization process:
Exception: System.Data.SqlClient.SqlException - Cannot insert duplicate key row in object 'dbo.Agents' with unique index 'IX_Agents_UserSid'.
The statement has been terminated.
Inner Exception: ~
The next synchronization attempt will be in 480 minutes.
Cause: Unhandled exception.
Resolution:
Verify the connectivity with the domain controller or if the Active Directory schema was properly applied and all user attributes are present.

Очень информативно :(.


Собственно из-за этого написал маленькую затычку, которая ищет группы в AD с идентичными именами и наполняет группы Lync в соответствии с их составом

import-module lync
Import-Module activedirectory

$msg_subject="Найдены изменения при верификации групп дозвона Lync"
$msg_from="eteam@contoso.ru"
$msg_to="mailadmin@contoso.ru"
$mailsrv="192.168.0.5"
$msg=""

$rgs=Get-CsRgsAgentGroup -Identity service:ApplicationServer:lyncpool01.office.contoso.ru | ? {$_.name -like "*.Tel.*"}

foreach($r in $rgs) {
    #if tied to distribution group - skip
    if ($r.DistributionGroupAddress) {continue}
    $name=$r.name
    #get corresponding group in AD
    try {
        $gr=get-adgroup -filter {cn -eq $name} -searchbase "ou=offices,dc=office,dc=contoso,dc=ru" -properties members
        }
    catch {
        $msg+="`n<br /><font color=`"red`">AD group not found for Lync Group $name</font>"
        $error.clear()
        continue
    }
    try {
        #List in AD
        $listnew=@()
        foreach($member in $gr.members) {
            $sip=(get-aduser $member -properties "msRTCSIP-PrimaryUserAddress")."msRTCSIP-PrimaryUserAddress"
            if($sip) {
                $listnew+=$sip
            }
        }
        
        #list in lync
        $listold=@()
        foreach($member in $r.AgentsByUri) {
            $listold+=[string]$member.AbsoluteUri
        }
        
        #check for differences in current list and AD
        $diff=Compare-object $listold $listnew
        if($diff) {
            $msg+="`n<br />Changes in Lync Group "+$name+":"
            $msg+="`n<table><tr><th>Name</th><th>Action</th></tr>"
            foreach($member in $diff) {
                $action=""
                if($member.sideindicator -eq "<=") {$action="deleted"}
                if($member.sideindicator -eq "=>") {$action="added"}
                if(!$action) {$action=$member.sideindicator}
                $msg+="`n<tr><td>"+($member.inputobject)+"</td><td>"+$action+"</td></tr>"
            }
            $msg+="`n</table>"
            
            $r.AgentsByUri.Clear()
            foreach($item in $listnew) {$r.AgentsByUri.Add($item)}
            Set-CsRgsAgentGroup -Instance $r
        }
    }
    catch {
        $msg+="`n<br /><font color=`"red`">error occured while updating Lync Group $name: ([string]$error[0])</font>"
        $error.clear()
    }
}

# если найдены ошибки
if($msg) {
    $msg=
        "
        <html><body>
        <br/ >Изменения в группах дозвона Lync:
        <br />"+
        $msg+
        "</body></html>"
    Send-MailMessage  -From $msg_from -to $msg_to -Subject $msg_subject -Body $msg -BodyAsHtml -Encoding ([System.Text.Encoding]::UTF8) -SmtpServer $mailsrv
}

К сожалению еще остается проблема с ручным обновлением членов групп, но т.к. необновляемые группы видно, можно достаточно быстро выявить проблеммного пользователя и покопаться в SQL.

Ссылки:

Управление группами\очередями\рабочими процессами blogs.technet.com

Комментариев нет:

Отправить комментарий