Внезапно выяснилось и подтвердилось, что при создании групп дозвона 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
Комментариев нет:
Отправить комментарий