Remove Delegate from SQL Database

Remove all Delegate from Skype SQL Database „RTCLocal“

We know that we have sometimes Problem with Delegates, we can´t read / Change / remove with sefautil.exe.

I create a Script for this issue, this is very helpful

If you have more delegate under „Manage Calls from:“ and no other Chance to remove it, you can use this small script.

 

Example: Get-SFBDelegate -DelegatorSip test1@contoso.com -DelegateSIP Test2@contoso.com

SFBDelegate


function Get-SfBDelegate {
Param([Parameter(Mandatory=$True,Position=0)][string]$delegateSIP,
[Parameter(Mandatory=$True,Position=1)][string]$delegatorSIP)

$SFBPools = Get-CsService | sort identity |select identity
$table =@()
foreach ($SFBPool in $SFBPools.identity)
{
$split = $SFBPool.Split(„:“)
$table += @{‚Function‘ = $split[0];’FQDN’=$split[1]}
}
$out = $table.ForEach({[PSCustomObject]$}) | ?{$.Function -match „registrar“} | Group-Object -Property Function

$menu = @{}
$Fqdn = ($out.group | ?{$_.FQDN -match „pool“} | select fqdn -Unique).FQDN
if ($fqdn.Count -gt „1“){
for ($i=1;$i -le $FQDN.count; $i++) {
Write-Host “ $i. $($FQDN[$i-1])“
$menu.Add($i,($FQDN[$i]))
}
}
else{
for ($i=1;$i -le $FQDN.count; $i++) {
Write-Host “ $i. $($FQDN)“
$menu.Add($i,($FQDN[$i]))
}
}
[int]$ans = Read-Host ‚Enter selection‘
$selection = $menu.Item($ans)
$servers = (Get-CsComputer -Pool $selection).identity

###################################################################
#$Servers = (Get-CsComputer | Where-Object -Property Pool -Match $pool | Select-Object identity).identity

$array =@()

foreach ($server in $Servers){

$DelegateQuery = „Select * From rtc.dbo.Resource Where UserAtHost='$delegateSIP‚“
$DelegateResult= (Invoke-Sqlcmd -ServerInstance $Server\rtclocal -Query $DelegateQuery)
$DelegatorQuery= „Select * From rtc.dbo.Resource Where UserAtHost='$delegatorSIP‚“
$DelegatorResult= (Invoke-Sqlcmd -ServerInstance $Server\rtclocal -Query $DelegatorQuery)

$resourceID = $DelegatorResult.ResourceId
$DelegationQuery = „select * From [rtc].[dbo].[Delegate] Where DelegatorId = '$resourceID‚“
$DelegationResult =(Invoke-Sqlcmd -ServerInstance $Server\rtclocal -Query $DelegationQuery)

foreach ($Delegation in $DelegationResult){
$search = $Delegation.DelegateId
$SQLscript = „select * From rtc.dbo.Resource where ResourceId = '$search‚“
$return= (Invoke-Sqlcmd -ServerInstance $Server\rtclocal -Query $SQLscript)

if ($DelegateResult.ResourceId -notmatch $search){$toRemove = „yes“} else {$toRemove = „no“}

$Subscribs = New-Object psobject -Property @{DelegatorId = $Delegation.DelegatorId;
DelegatorSIP =$DelegatorResult.UserAtHost;
DelegateId = $Delegation.DelegateId;
DelegateSIP =$return.UserAtHost;
FrontendServer = $server;
toRemove = $toRemove}
$array += $Subscribs
}
}

($Global:array = $array)| sort toRemove | ft -a Delegator*, Delegate*, Front*, to*

if (!([string]::IsNullOrEmpty($Global:array))){

$n = „n“
$n = Read-Host -Prompt „Do you like to remove all with property toRemove = yes? Press y = yes, n = no“

if ($n -eq ‚y‘){
foreach ($arr in $array){
if ($arr -match „yes“) {
$removeDelegator = $arr.DelegatorId
$removeDelegate = $arr.DelegateId
$DeleteQuery =“Delete From [rtc].[dbo].[PromptedSubscriber] Where PublisherId = '$removeDelegator‚ AND SubscriberId = '$removeDelegate
Delete From [rtc].[dbo].[Delegate] Where DelegatorId = '$removeDelegator‚AND DelegateId = '$removeDelegate‚“

$server = $arr.FrontendServer+“\rtclocal“
Invoke-Sqlcmd -ServerInstance $server -Query $DeleteQuery -ErrorAction SilentlyContinue
Write-Output „DELETED !!“
$arr | ft -a
}

$SubscriberId | ft -a
}
}
}
else {Write-Host „we dont found Entrys for the delegator: $delegatorSIP and delegate: $delegateSIP „}

}# Remove Delegator in SQL DATABASE end

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.