Those of you familiar with Skype for Business voice functionality will be aware of the use of announcements. Announcements are pre-determined messages that can be played when a user dials an incorrect number, unallocated number and they can even be used to route into response groups and other third party applications.
These announcements are created and assigned to a particular application server pool i.e a front end pool. This assignment means that the application server is responsible for the announcement and the response group service of that application server is used in order to play the announcement to the caller.
When this application server pool is down, the announcement service will also fail. Pool pairing and automated failover scenarios out of the box do not handle the failover of announcements to the DR application pool. Therefore, in a pure failover scenario, the announcement service is not resilient.
Many customers can often have numerous announcements for whatever reason, and the normal process of migrating these is sadly to recreate them on another pool. Even migrating from previous versions of Lync, the announcements are not automatically migrated and there is no move-csannouncement PowerShell commandlet to help.
Announcing the new function Migrate-CsAnnouncements
The purpose of this script, Migrate-CsAnnouncements.ps1 is to facilitate the copying of announcements from one application pool to another in order to save administrative effort. The function will not update unassigned number ranges as there are scenarios whereby admins may not want to.
To download the function please visit https://gallery.technet.microsoft.com/lync/Migrate-Skype-for-Business-670b4db8#content
Run the script in elevated PowerShell and then type
Migrate-CsAnnouncements –SourcePool <PoolA.domain.com> –TargetPool <PoolB.domain.com>
This will automatically copy the announcements from the source pool to the target pool.
The script supports both TextToSpeech and custom AudioFilePrompts and will import the audio prompts that are found in the source pool application folder
Demonstration
Here we can see that we have a number of announcements assigned to an application server pool
As we can see, we have two announcements that have audio file prompts. The audio file prompts are stored in \\pool-fileshare\share\1-ApplicationServer-X\AppServerFiles\Rgs\AS
Note: simply copying these to the target pool file share will not work, they must be re-imported as locations are written into the RGS database
Next we load the PowerShell Script Migrate-CsAnnouncements.ps1 into PowerShell
Import-Module “pathto:\Migrate-CsAnnouncements.ps1”
Next, we call the function Migrate-CsAnnouncements and specify both source and destination pools
Migrate-CsAnnouncements –SourcePool poola.domain.com –TargetPool poolb.domain.com
The script will output the announcements it copies
Running Get-CsAnnouncement and we can now see the announcements have been copied over
and on the target pool file share we can see the audio prompts have also been copied over
We can now assign the announcements from the target pool against unassigned numbers and manually failover when needed
Mark is an Independent Microsoft Teams Consultant with over 15 years experience in Microsoft Technology. Mark is the founder of Commsverse, a dedicated Microsoft Teams conference and former MVP. You can follow him on twitter @UnifiedVale
[…] Script: Migrate-CsAnnouncements.ps1 […]
Thank you for this announcement migration script.
Ik need it to move from 2013 to 2015
However I get a error, maybe you know what is going wrong:
Set-CsAnnouncement : Cannot validate argument on parameter ‘Identity’. The argument is null or empty. Provide an
argument that is not null or empty, and then try the command again.
Migrate-CsAnnouncements.ps1:61 char:42
+ Set-CsAnnouncement -Identity $new.Identity -TargetUri $item.TargetUr …
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Set-CsAnnouncement], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Rtc.Management.Internal.SetAnnouncementCmdlet
Exelent idea!!! but you missed a scenario: when Announcement has nor T2S neither File playback. I use that kind of annuncements to, for instance, forward multiple numbers to the same response group.
All that your script needs it another “else” under “If (!$check)”. I added this line there:
else{
New-CsAnnouncement -Parent “Service:ApplicationServer:$($TargetPool)” -Name “$($item.Name)”
}
At that way, you get the announcement created in the Target Pool no matter it has not T2S or File playback configured.
BTW, this probably solves the issue that han.ten.hage@missingpiece.nl has (I had the same error and my solution was this)
thanks for the input, i will update the script shortly
Hi Mark,
Thanks for the Script. Just wanted to check if this has been updated to fix the scenario mentioned by Hen.Ten.Hage.
Yesterday I ran the script and got same Identity error. looks like still script need a mix.