Get-CsDuplicatedRoutingGroup.ps1


<#PSScriptInfo
 
.VERSION 1.1
 
.GUID 2903dd9a-251f-4020-9751-0e486cd30edb
 
.AUTHOR David Paulino
 
.COMPANYNAME UC Lobby
 
.COPYRIGHT
 
.TAGS Lync LyncServer SkypeForBusiness SfBServer WindowsFabric
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
  Version 1.0: 2019/08/12 - Initial release.
  Version 1.1: 2023/10/07 - Updated to publish in PowerShell Gallery.
 
 
.PRIVATEDATA
 
#>


<#
 
.DESCRIPTION
 Returns the duplicated routing group information from Lync/Skype for Business Front Ends.
 
#>
 

[CmdletBinding()]
param(
[parameter(ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true)]
    [string] $PoolFqdn
)

if($PoolFqdn){

$FrontEnds = Get-CsComputer -Pool $PoolFqdn

$RGAQuery = "SELECT f.Fqdn, r.RoutingGroupName FROM dbo.RoutingGroupAssignment r, dbo.FrontEnd f WHERE f.FrontEndId = r.FrontEndId"
$RGDupOutput = New-Object System.Collections.ArrayList

foreach($FE in $FrontEnds){
    
    try{
        $ServerInstance = $FE.fqdn + "\RTCLOCAL"
        Write-Warning "Trying to connect to : $ServerInstance"
        $DupRGs = Invoke-Sqlcmd -query $RGAQuery -ServerInstance $ServerInstance -Database RTC -ErrorAction SilentlyContinue | Group-Object RoutingGroupName | Where-Object {$_.Count -gt 1} | Select Name
        foreach($DupRG in $DupRGs){

        if($DupRG.Name -ne '00000000-0000-0000-0000-000000000000'){

            $UserCount = (Get-CsUser | ?{$_.UserRoutingGroupId -eq $DupRG.Name}).Count

            $RGDupInfo = New-Object PSObject -Property @{            
                            FrontEnd      = $FE.fqdn
                            RoutingGroup  = $DupRG.Name
                            UserCount = $UserCount
                          }
                [void]$RGDupOutput.Add($RGDupInfo)
        }
     }
    } catch {
            Write-Warning "Failed to connect to: $ServerInstance"
    }
}
    $RGDupOutput | Select FrontEnd,RoutingGroup,UserCount
}