Lync – Change queue overflow number with PowerShell Script

The scenario is you have created a Response Group (IVR) with an option to call an Out Of Hours engineer.  You configure a queue overflow to forward straight to a mobile telephone number outside of your organisation as follows:

Queue_Overflow

The out of hours engineer changes on a rota and you want staff to be able to change the queue overflow number without giving them having to access the Lync Control Panel.  I have created a PowerShell script that allows users to accomplish this.  They can select from a list of names in the menu or manually type a number.  Any changes are logged to a text file.

Change_QueueOverflow

Here is the script:

# Author: Created by Weakest Lync, www.WeakestLync.com
# Purpose: Script to Change Queue Overflow Number
# Version: 1.0
# Changes: DATE - Change
# 12/07/2013 - Release 1.0

# Script Config
Import-Module Lync
$team = "ICT Service Desk" #Team script is used for
$queue = "ICT Service Desk" #Lync Queue Name
$sipdomain = "@Domain.com" #Lync Sip Domain
$lyncpool = "Service:ApplicationServer:LyncFE01.domain.local" #Lync front end pool identity
$logfile = "\\fileserver\share\Lync\log.txt"

# Menu
cls
Write-Host "* Change" $team "On Call Number *" -ForegroundColor Cyan
Write-Host " "
Write-Host "Change the" $team "On Call number to:"
Write-Host " "
Write-Host "1. User1" -foregroundcolor Yellow
Write-Host "2. User2" -foregroundcolor Yellow
Write-Host "3. User3" -foregroundcolor Yellow
Write-Host "4. User4" -foregroundcolor Yellow
Write-Host "5. User5" -foregroundcolor Yellow
Write-Host "6. Other" -foregroundcolor Yellow
Write-Host " "
$a = Read-Host "Select 1-6: "
Write-Host " "

# Logic to set sip URI based on menu selection
switch ($a)
{
 1 {
 $forwardname = "User1"
 $forwardto = "+447123456781"
 }
 2 {
 $forwardname = "User2"
 $forwardto = "+447123456782"
 }
 3 {
 $forwardname = "User3"
 $forwardto = "+447123456783"
 }
 4 {
 $forwardname = "User4"
 $forwardto = "+447123456784"
 }
 5 {
 $forwardname = "User5"
 $forwardto = "+447123456785"
 }
 6 {
 # Other
 Write-Host "Enter phone number in E.164 format e.g.: " -NoNewLine
 Write-Host "+44123456789" -ForegroundColor Magenta
 $forwardto = Read-Host "Phone Number"
 }
}

# Code to put E.164 phone numbers into sip format
$forwardto = "sip:" + $forwardto
$forwardto = $forwardto + $sipdomain

# Code to change on call number in Lync
$x = Get-CsRgsQueue -Identity $lyncpool -Name $queue
$x.OverflowAction = New-CsRgsCallAction -Action TransferToPstn -Uri $forwardto
Set-CsRgsQueue -Instance $x

# Write to log file
$date = Get-Date
Write-output "$date, $team, $forwardname, $forwardto" | Out-File -append $logfile

Write-Host "On call number changed to: " -NoNewline
Write-Host $forwardname "-" $forwardto -ForegroundColor Green
Write-Host " "

Users need to be a member of CSResponseGroupAdministrator and have the Lync Admin Tools installed.  However, in my environment I have created a service account and used psexec to publish the script via Citrix (The Citrix server has the Lync Admin Tools installed).


c:\scripts\psexec.exe -e -u domain\RGSSVCAccount -p password C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit "C:\Scripts\LyncScripts\Lync_QueueOverflow.ps1"

Lync 2013 CDR Report – Recharge Call Costs

I needed a method to recharge departments call costs from Microsoft Lync and came across the following article by Frederik Lefevre:

http://www.ucprofessional.com/2012/01/lync-cdr-report.html

I found this was exactly what I required but unfortunately the SQL views were not compatible with Lync 2013. This is a simple guide on how to get this working on Lync 2013 for call costs in the UK:

SQL Database Configuration

On the Lync Monitoring and Archiving SQL instance, create a Linked Server named “ADSI” with the following settings:

Configure Security so connections will be made using the security context: Enter an LDAP lookup service accounts credentials.

Once complete, right click ADSI and click “Test Connection”

Create a new database named LyncBilling on the same instance as your Lync LcsCDR database.

Create a view named “LyncEVUsers” (change domain name to suit your environment)

SELECT displayName AS Displayname, department AS Department, [msRTCSIP-PrimaryUserAddress] COLLATE Latin1_General_CI_AI AS SipAddress
FROM OPENQUERY(ADSI,
'SELECT displayName, msRTCSIP-PrimaryUserAddress, department FROM ''LDAP://DC=domain,DC=local''WHERE objectClass = ''user'' AND msRTCSIP-OptionFlags = 385 ')
AS derivedtbl_1

Create a view named “OutgoingCallsUK”

SELECT TOP (100) PERCENT SessionDetails.FromUri, SessionDetails.ToUri, SessionDetails.InviteTime, SessionDetails.ResponseTime, SessionDetails.EndTime,
CASE WHEN LEFT(ToUri, 4) = '+441' THEN 'National' WHEN LEFT(ToUri, 4) = '+442' THEN 'National' WHEN LEFT(ToUri, 4) = '+443' THEN 'National' WHEN LEFT(ToUri,
2) = '01' THEN 'National' WHEN LEFT(ToUri, 2) = '02' THEN 'National' WHEN LEFT(ToUri, 2) = '03' THEN 'National' WHEN LEFT(ToUri, 4)
= '+447' THEN 'Mobile' WHEN LEFT(ToUri, 2) = '07' THEN 'Mobile' WHEN LEFT(ToUri, 4) = '+448' THEN 'Special' WHEN LEFT(ToUri, 2)
= '08' THEN 'Special' WHEN LEFT(ToUri, 4) = '+449' THEN 'Premium' WHEN LEFT(ToUri, 2) = '09' THEN 'Premium' WHEN LEFT(ToUri, 3)
<> '+44' THEN 'International' END AS Tariff, LcsCDR.dbo.Gateways.Gateway, dbo.LyncEVUsers.Displayname, dbo.LyncEVUsers.Department, DATEDIFF(ss,
SessionDetails.ResponseTime, SessionDetails.EndTime) AS Duration
FROM LcsCDR.dbo.SessionDetailsView AS SessionDetails INNER JOIN
LcsCDR.dbo.VoipDetails ON SessionDetails.SessionIdTime = LcsCDR.dbo.VoipDetails.SessionIdTime INNER JOIN
LcsCDR.dbo.Gateways ON LcsCDR.dbo.VoipDetails.ToGatewayId = LcsCDR.dbo.Gateways.GatewayId RIGHT OUTER JOIN
dbo.LyncEVUsers ON 'sip:' + SessionDetails.FromUri = dbo.LyncEVUsers.SipAddress
WHERE (SessionDetails.MediaTypes = 16) AND (SessionDetails.FromUriType = N'UserUri') AND (SessionDetails.ToUriType = N'PhoneUri') AND
(SessionDetails.ResponseCode = 200)
ORDER BY SessionDetails.InviteTime

You should now have two views created in the LyncBilling database.


Create a report in Microsoft Excel:

Create a new Data Connection in Excel: Data > From Other Sources > From SQL Server

Enter SQL server name and instance and provide credentials:


Select the “LyncBilling” database and the “OutgoingCallsUK” table:


Click Finish.

Click OK on the Import Data window.

The billing data should import into Excel:

Rename Sheet1 to “Data”

Rename Sheet2 to “Tariffs” and populate the following rates:

Create two new columns in the Data sheet, “TotalCost” and “Month”

Formula for TotalCost:

=IF(F2="Mobile",(J2/60)*Tariffs!$B$1,IF(F2="International",(J2/60)*Tariffs!$B$2,IF(F2="National",(J2/60)*Tariffs!$B$3,IF(F2="Special",(J2/60)*Tariffs!$B$4,IF(F2="Premium",(J2/60)*Tariffs!$B$5)))))

Format TotalCost as currency

Formula for Month:

=TEXT(C2,"mmmYY")

The Data sheet should now look like this:


Click in the top left corner of the Data sheet to highlight all cells.

Click “Insert” > “Pivot Table”

Configure the Pivot Table fields as follows:

Right click the Count of TotalCost field and select “Value Field Settings”. Select “Sum” and change the number format to currency. Rename the Pivot Table sheet to “Report”

You can now use the Pivot Table filters to find out call costs for Departments based on a particular Gateway and Month.

To refresh the data click “Data” > “Refresh” on the Data sheet, then repeat on the Report sheet:

Lync 2013 – Automated Backup Script

This script will backup Lync 2013 core data and settings off all servers in the topology as per Technet article: http://technet.microsoft.com/en-us/library/hh202170.aspx

The script does the following:

  1. Backup the Central Management Store
  2. Backup the Location Information Service Data
  3. Backup the user data on each Front End pool
  4. Backup the Response Group configuration on each Front End pool
  5. Backup the Voice Configuration

It will create a new folder with a date stamp for each backup.  It will also clean up backups older than x days.  To use the script:

  1. Create a scheduled task on one of your Lync Front End servers to run the backup script, see here.
  2. Configure the Backup Path and Backup Retention values.

Note I have only tested this on Lync 2013 with two standard edition (pool pair) servers.  I have not tested on enterprise pools.  You will also need to do a separate SQL backup of Monitoring, Archiving and Persistent Chat databases as well as a file system backup of all File Stores.  Use at your own risk.

Update 06-11-2013 – I have fixed the delete old backup directories as I noticed that was not working.  Also tested on Lync 2013 Enterprise and seems to work OK :).

# Author:	Created by Weakest Lync, www.WeakestLync.com
# Purpose:	Script to backup Lync 2013
# Version:	1.1
# Changes:	DATE - Change
#			08/07/2013 - Release 1.0
#			06/11/2013 - Release 1.1 - Fixed code that deletes old backup directories

Import-Module Lync

# Script Config
$BackupPath = "C:\LyncBackups\Backups\" # Backup Path
$BackupRetention = -14 # Number of days to keep old backups (Requires a "-", e.g. two weeks would be -14, 5 days would be -5)

# *** Start of script ***

# Delete old backup directories
Get-ChildItem $BackupPath |? {$_.psiscontainer -and $_.lastwritetime -le (get-date).adddays($BackupRetention)} |% {remove-item $_.FullName -recurse -force}

# Get date in day-month-year format and set backup path
$DateStamp = Get-Date -Format dd-MM-yy
$BackupPath = $BackupPath + "LyncBackup_" + $DateStamp +"\"
New-Item $BackupPath -type directory -force

# Backup the Lync Central Management Store
$CMSBackupFile = $BackupPath + "Lync-CMS-Config.zip"
Export-CsConfiguration -FileName $CMSBackupFile

# Backup Location Information Service data
$LISBackupFile = $BackupPath + "Lync-LIS-Config.zip"
Export-CsLisConfiguration -FileName $LISBackupFile

# Backup User Data (Lync 2013 servers only)
$UserServer = Get-CsService -UserServer | Where-Object {$_.version -eq 6}

ForEach ($Service in $UserServer) {
    $UserDataBackupFile = $BackupPath + "Lync-User-Config_" + $($Service.PoolFqdn) + ".zip"
    Export-CsUserData -PoolFQDN $($Service.PoolFqdn) -FileName $UserDataBackupFile
}

# Backup Response Group Configuration (Lync 2013 servers only)
$ApplicationServer = Get-CsService -ApplicationServer | Where-Object {$_.version -eq 6}

ForEach ($Service in $ApplicationServer) {
    $RGSBackupFile = $BackupPath + "Lync-RGS-Config_" + $($Service.PoolFqdn) + ".zip"
    Export-CsRgsConfiguration -Source ApplicationServer:$($Service.PoolFqdn) -FileName $RGSBackupFile
}

# Backup Voice Configuration
$BackupPath = $BackupPath + "Lync-Voice-Config\"
New-Item $BackupPath -type directory -force

Get-CsDialPlan | Export-Clixml -path $BackupPath\DialPlan.xml
Get-CsVoicePolicy | Export-Clixml -path $BackupPath\VoicePolicy.xml
Get-CsVoiceRoute | Export-Clixml -path $BackupPath\VoiceRoute.xml
Get-CsPstnUsage | Export-Clixml -path $BackupPath\PSTNUsage.xml
Get-CsVoiceConfiguration | Export-Clixml -path $BackupPath\VoiceConfiguration.xml
Get-CsTrunkConfiguration | Export-Clixml -path $BackupPath\TrunkConfiguration.xml

Lync – Response Group Voice Policy

I recently deployed an SBA at a branch office and configured an RGS for the Reception. If the receptionist does not answer within a certain time period then the call is forwarded to an external party.

When calling the reception response group, after the queue timeout period the call would be forwarded to the external party (simple!).

I came across a problem where my the RGS is hosted on a Lync Front End server in the UK data centre (as SBA does not support RGS). The Front End server has a site Voice Policy configured to route all PSTN calls via the UK gateway. The problem was when the queue timed out, my RGS would forward the call out of a central gateway in the UK rather than the gateway built in to the SBA (in the Netherlands). To resolve this issue I had to assign a User Voice Policy to the Response Group that had the correct PSTN usage, route and trunk to the gateway.

Note: I already had site and user voice policies configured for my SBA and Gateway (I use http://lyncoptimizer.com/). This tool creates all site voice policies, user voice policies, normalization rules, routes etc. It’s really useful!

First step is to use the GetCSApplicationEndPoint command to get the Response Group:

Get-CsApplicationEndpoint -Filter {DisplayName -Like "NL Office Reception*"}


Identity               : CN={42b43972-7e20-4720-b5d9-7020d061ef69},CN=Application Contacts,CN=RTC Service,CN=Services,CN=Configuration,DC=domain,DC=local
RegistrarPool          : lyncfe.domain.local
HomeServer             : CN=Lc Services,CN=Microsoft,CN=7:1,CN=Pools,CN=RTC Service,CN=Services,CN=Configuration,DC=domain,DC=local
OwnerUrn               : urn:application:RGS
SipAddress             : sip:nl.Officereception@domain.com
DisplayName            : NL Office Reception
DisplayNumber          : +31101234567
LineURI                : tel:+31101234567
PrimaryLanguage        : 0
SecondaryLanguages     : {}
EnterpriseVoiceEnabled : True
ExUmEnabled            : False
Enabled                : True

Once you have confirmed that this is the right Response Group, assign a voice policy by piping Get-CSApplicationEndpoint in to Grant-CSVoicePolicy.

Get-CsApplicationEndpoint -Filter {DisplayName -Like "NL Office Reception*"} | Grant-CsVoicePolicy -PolicyName "NL-Rotterdam-10-Office-International"

That’s it, now when the Response Group forwards a call out to PSTN it will route via the correct PSTN gateway.

To remove the voice policy you can run the following:

Get-CsApplicationEndpoint -Filter {DisplayName -Like "NL Office Reception*"} | Grant-CsVoicePolicy -PolicyName $null

Lync 2013 High Availability

When designing your Lync 2013 topology it is easy to overcomplicate the topology with Enterprise Pools in each datacenter.  Spanning pools is not supported across metropolitan datacenters in Lync 2013 which means as a minimum recommendation you would require 3 Front End servers in each datacenter  pool.  Then on top of that you require SQL backend servers, Edge Servers, Reverse Proxies, Office Web App Servers, File Servers, Load Balancers and Persistent Chat servers!  Not to mention you require Active Directory, a Certificate Authority and Exchange UM if you want Voicemail!

When designing my first Lync 2013 topology it started to get very big.  After some careful consideration I decided to implement 2 Standard Edition Front End servers as a “Pool Pair” across the Primary and Secondary datacenters.  This was due to the Topology being for less than 5000 users as well as the Lync servers being hosted in Tier 3 datacenters on a highly available VMware cluster, SAN storage and Network.  The chances of a FE server failure were low and a Standard Edition Pool Pair provides an adequate MTTR if that server was to fail (<30 minutes with Administrator intervention).

If one of the servers was to fail in the Pool Pair, users will failover to the other server automatically.  Users will receive an error in their Lync Client “Limited functionality due to an outage”  but will still be able to make phone calls and IM.  They will lose features like contacts, conferencing and Presence.  However with Administrator intervention you can manually failover the pool to the other member of the Pool Pair using the Invoke-CSPoolFailover command.  After this is complete, contacts, conferencing and presence are all restored.  Here is the Technet article on how to failover a pool: http://technet.microsoft.com/en-gb/library/jj204678.aspx

Enterprise Voice calls will still work assuming your Voice Routing is configured correctly on your PBX/Gateway.  Response Groups also need to be recovered manually during a failover.

It is also worth pointing out that you can balance users across both servers in a Pool Pair (e.g. 2500 on one, and 2500 on the other) so the impact is less if a server was to fail.  In my environment the server in the secondary data centre is for failover (DR) only. I am currently writing a PowerShell script that will sit on the DR server that can be executed by a System Administrator should the primary Front End fail.  This can be used to failover all services to the secondary Front End in a DR scenario.  I will post it on here once complete and tested.

Finally, here is an excellent blog post that explains the advantages of Standard Edition servers in a Pool Pair to provide HA and DR: http://jasonshave.blogspot.co.uk/2012/11/lync-server-2013-ha-design-changes-and.html

Lync 2013 – Conference Error

After deploying a Lync 2013 pool alongside an existing Lync 2010 deployment, users were unable to join conferences created by users registered on the 2013 pool. They would get the error “Conference Error”. This affected users who were moved from the 2010 pool and new users created on the 2013 pool.

When trying to change the Lync meeting options in Outlook or trying to reset the Assigned Conference Information via the Dial-in conference settings page it would generate an error.

Also, when calling the dial-in conference number and entering the conference ID you would get the message: “Sorry I can’t find a meeting with that number, try entering your conference ID again and then press #”.

The Lync 2013 Front End event logs had the following event:

Log Name:      Lync Server

Source:        LS MCU Factory

Date:          09/04/2013 17:22:32

Event ID:      51048

Task Category: (1021)

Level:         Error

Keywords:      Classic

User:          N/A

Computer:      fe2013-1.domain.local

Description:

McuFactory could not find the pool associated with one of the conference directories.

Failed to read pool FQDN associated with conference directory 11.

Cause: The pool associated with the conference directory does not exist anymore.

Resolution:

Conference directories without a valid pool associated can be deleted using management tools.

To fix, if you run the command “Get-CsConferenceDirectory” it will return which conference directories are in use.

Get-CsConferenceDirectory | select Identity,ServiceID

--------                                ---------
 1                                       UserServer:fe2010.domain.local
 11                                      BackCompatSite-UserServices-1
 12                                      UserServer:fe2013-1.domain.local
 13                                      UserServer:fe2013-2.domain.local

As you can see from the output above, there is still a conference directory from the old OCS 2007 R2 environment (BackCompatSite). The BackCompatSite was deleted from the Lync 2010 Topology a long time ago so I’m not sure why it is still referenced. As you can see this has the same Identity as the error on the Lync 2013 FE server (Failed to read pool FQDN associated with conference directory 11). To resolve this I deleted the BackCompatSite Conference Directory by running the command below (where 11 is the Identity of the Conference Directory I want to delete):

Remove-CsConferenceDirectory -Identity 11 -Force

After I restarted the Lync 2013 FE server, users were able to create and join conferences. The meeting options in Outlook, Dial-in conferencing settings page and dial-in conference ID’s all worked too. Looks like Lync 2010 was fine with this old BackCompatSite Conference Directory, but Lync 2013 wasn’t!

Lync 2013 – Enabling Topology Completed With Errors

I recently started building a Lync 2013 Pilot Pool alongside my Lync 2010 deployment. When publishing the topology I got the following errors:

Publishing in progress

Failed adding “AccessWrite” permissions for “RTCComponentUniversalServices”
Failed adding “AccessRead” permissions for “RTCComponentUniversalServices”
Failed adding “AccessWrite” permissions for “RTCHSUniversalServices”
Failed adding “AccessRead” permissions for “RTCHSUniversalServices”
Failed adding “AccessWrite” permissions for “RTCUniversalServerAdmins”
Failed adding “AccessRead” permissions for “RTCUniversalServerAdmins”

Access control list (ACL) might fail on UNIX file shares. Refer to the deployment guide to manually set the ACLs in the file share.

When the Publishing wizard is complete you see the error:

Enabling Topology… Completed with errors

When you view the log file you see the following errors for the Lync File Share:

ACLError: Access permissions error.

Error: Failed to save permissions on “\\server.domain.local\LyncFS$”.

Updated Fix: When running Topology Builder, right click and “Run As Administrator”.  Thanks to Dave in the comments below.

To fix this I had to add the following groups to the Share (Not NTFS) permissions on the Lync File Share. I had to do this even though Everyone had Full Control on the Share Permissions. Topology Builder would fail publishing the topology until I added these groups on.

RTCComponentUniversalServices
RTCHSUniversalServices
RTCUniversalServerAdmins

After changing the Share permissions, the topology published successfully:

Script install of Lync 2010 client with a CU and MUI pack

In this post I will cover how to deploy the Lync 2010 client with a CU (Cumulative Update) and MUI (Multilingual User Interface) pack.  I used this method to deploy Lync 2010 with Microsoft SCCM.

Create a package source folder (e.g. Lync_2010_MUI_CU7, then download the following files place them into two subfolders named “32bit” and “64bit”:

32bit Folder:
LyncSetup.exe (Lync 2010 32bit setup file)
Lync.msp (Lync 2010 32bit CU – Download CU 7)
LyncMUI_32bit.exe (Lync 2010 32bit MUI setup file – Download)

64bit Folder:
LyncSetup.exe (Lync 2010 64bit setup file)
Lync.msp (Lync 2010 64bit CU 6 update – Download CU 7)
LyncMUI_64bit.exe (Lync 2010 64bit MUI setup file – Download)

Create the following Batch File named install.bat containing the code below and save it in the root of the package source folder:

:: Batch file to install Lync 2010 Client with CU7 and MUI packs on 32 bit and 64 bit Windows
:: Created by Shy IT, www.ShyIT.co.uk

@echo off

IF EXIST "C:\PROGRAM FILES (x86)" (GOTO :x64) ELSE (GOTO :x86)

:x86
:: ****Install for 32 BIT****
:: Install Lync 2010 Client
"%~dp0\32bit\LyncSetup.exe" /Install /Silent
:: Install Lync CU7
msiexec /update "%~dp0\32bit\lync.msp" /quiet
:: Install Lync MUI
"%~dp0\32bit\LyncMUI_32bit.exe" /quiet /norestart
GOTO :EOF

:x64
:: ****Install for 64 BIT****
:: Install Lync 2010 Client
"%~dp0\64bit\LyncSetup.exe" /Install /Silent
:: Install Lync CU7
msiexec /update "%~dp0\64bit\lync.msp" /quiet
:: Install Lync MUI
"%~dp0\64bit\LyncMUI_64bit.exe" /quiet /norestart
GOTO :EOF

You can then create a package within SCCM using the package source folder and create a program that runs install.bat.  This will install Lync 2010 on 32bit and 64bit machines.  You can of course split the 32 bit and 64 bit in to separate packages but this method suited my environment.

 

 

Hiding Response Groups From Address Book – Lync Server 2010

In this post I will cover how to hide Response Groups from the Lync Address Book. You can hide users by setting the msExchHideFromAddressLists value to TRUE either by using the Exchange Management Console or Exchange Management Shell (If you have MS Exchange). You can also hide contacts (e.g. Common Area Phones/Analogue Devices) by setting the same value to TRUE using adsiedit. Microsoft also provide a tool in the Lync Resource Kit called ABSConfig that lets you configure who to include in the Address Book files.

To hide Response Groups you can use the same msExchHideFromAddressLists value but you need to find the object in adsiedit which can be a bit tricky. In this example my Lync global AD settings are stored in the Configuration container but yours may be in the System container.

System Container:        CN=Application Contacts, CN=RTC Service, CN=Microsoft,CN=System,DC=domain,DC=local
Configuration Container:    CN=Application Contacts, CN=RTC Service, CN=Services,CN=Configuration,DC=domain,DC=local

  1. Open adsiedit (start > run > “adsiedit.msc”)
  2. On a 2008 R2 server by default you won’t see the configuration partition in adsiedit

  3. Right click “Default naming context [dc.domain.local]” and click “Settings”.
  4. Change “Select a well known Naming Context:” to “Configuration”.
  5. Expand Services > RTC Service > Application Contacts

As you can see it is not easy to identify your response groups in the Application Contacts container. For each object if you right click and select properties you will see the Attribute Editor:

To identify which response group the object refers to find the “proxyAddress” value. This is the sip address of the Response Group. Once you have identified the Response Group you want to hide from the Address Book, find the value “msExchHideFromAddressLists” and set it to TRUE.

The Address Book process will update the Address Book files at a fixed time (pre-configured) or you can run Update-CSAddressbook. Clients update the Address Book every 24 hours so they should receive the new address book with the Response Group hidden.

How to Backup Lync Server 2010

It is important to backup your Lync environment so that you can restore service in the event of a disaster.  The following Microsoft TechNet articles explain how to backup Lync Server 2010:

In this article I would just like to share how I have simplified this process.

Ben Lye at onesimplescript.com has written an excellent script that enumerates your Lync Topology and backs up your Topology Configuration data, Location Information Service data, Response Group configuration data from all pools and persistent user data from all registrars.  The script can be found here: http://www.onesimplescript.com/2012/05/automating-backups-of-lync-2010.html

The script requires the RgsImportExport.ps1 script in the Lync Resource Kit which you can download from here: http://www.microsoft.com/en-us/download/details.aspx?id=21165

I have set up a scheduled task to run this script once per week on one of my Lync Front End servers.  You can do this by:

  1. Creating a “LyncBackup” account in Active Directory and adding it to the “RTCUniversalServerAdmins” Group
  2. Grant LyncBackup “Log On As a Batch Job” on one of your FE servers in the Local Security Policy
  3. Create the following folders, c:\LyncBackups and c:\LyncBackups\Backups
  4. Place a copy of Ben Lye’s script into c:\LyncBackups
  5. Create a Scheduled Task in Task Scheduler to run “powershell.exe C:\LyncBackups\Backup-LyncConfig.ps1”
  6. Configure the Scheduled Task to run using the “LyncBackup” account and to run whether user is logged on or not.

You should also backup the Lync SQL databases using the SQL Management Studio or a Third Party backup plugin and do a file system backup of all Lync Server file stores.

NorthernUC

Using Microsoft Skype for Business and Teams

ahandyblog

UC, SfB, Lync, Teams, Cloud, Exchange, Office365, EMS, Azure