Powershell Script - Lync Dump Address Book From SQL Database
i have had lots of address book issues the last few days and put together this quickly (and i know there are cleaner ways of doing it!)
basically it probes the sql backend server dumps out what information the update-csuserdatabase populates from AD
This for me anyway gave a stepping stone to figuring out how far the replication was actually happening and which part of the address book services was failing and why!
here is the script
and run it from a front end server and then you can view the ABReport.txt for all the entries it has
*******************************************************************************************************************************************************************************************************
cls
$computername = $env:COMPUTERNAME
$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$strdomain = $domain.name
$lyncserver = $computername + "." + $strdomain
Import-Module lync
$userdb = (get-csservice -userdatabase).poolfqdn
$dbinst = (get-csservice -userdatabase).sqlinstancename
$SqlServer = $userdb + "\" + $dbinst
$SqlCatalog = "RTCab"
$SqlQuery = "select * from AbAttribute"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SqlServer; Database = $SqlCatalog; Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
write-host "Populating SQL Data From AbAttribute..."
$sql = $SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$tempstoreABAttribute = $dataset.tables[0].rows
$abattribute = new-object psobject
for ($count=0;$count -lt $tempstoreAbattribute.count;$count++)
{
$id = $tempstoreAbattribute[$count].id
$name = $tempstoreAbattribute[$count].name
$abattribute | Add-member -Name $id -MemberType Noteproperty -value $name
}
$userdb = (get-csservice -userdatabase).poolfqdn
$dbinst = (get-csservice -userdatabase).sqlinstancename
$SqlServer = $userdb + "\" + $dbinst
$SqlCatalog = "RTCab"
$SqlQuery = "select * from AbUserEntry"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SqlServer; Database = $SqlCatalog; Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
write-host "Populating SQL Data for AbUserEntry..."
$sql = $SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$tempstoreAbuserEntry = $dataset.tables[0].rows
$userdb = (get-csservice -userdatabase).poolfqdn
$dbinst = (get-csservice -userdatabase).sqlinstancename
$SqlServer = $userdb + "\" + $dbinst
$SqlCatalog = "RTCab"
$SqlQuery = "select * from AbAttributeValue"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SqlServer; Database = $SqlCatalog; Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
write-host "Populating SQL Data for AbAttributevalue..."
$sql = $SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$tempstoreAbAttributeValue = $dataset.tables[0].rows
foreach ($abuserentry in $tempstoreabuserentry)
{
$userabentry = new-object psobject
$userid = $abuserentry.userid
$guid = $abuserentry.userguid
foreach ($abattribute in $tempstoreabattributevalue)
{
if ($abattribute.userid -eq $userid)
{
#$abattribute
switch ($abattribute.attrid)
{
1 {$attr = "GivenName"}
2 {$attr = "sn"}
3 {$attr = "displayname"}
4 {$attr = "title"}
5 {$attr = "mailnickname"}
6 {$attr = "company"}
7 {$attr = "physicaldeliveryofficename"}
8 {$attr = "msrtcsip-primaryuseraddress"}
9 {$attr = "telephonenumber"}
10 {$attr = "homephone"}
11 {$attr = "mobile"}
12 {$attr = "othertelephone"}
13 {$attr = "ipphone"}
14 {$attr = "mail"}
15 {$attr = "grouptype"}
16 {$attr = "department"}
17 {$attr = "description"}
18 {$attr = "manager"}
19 {$attr = "proxyaddresses"}
20 {$attr = "msexchhidefromaddresslists"}
99 {$attr = "entryid"}
}
$userabentry |Add-member -Name $attr -membertype noteproperty -value $abattribute.value -force
}
}
$userabentry |out-file -append ABreport.txt
}
Comments
- Anonymous
February 08, 2013
Thanks for this, really useful. Worked on Lync 2013 RTM too. Tom