Skype for Business– Migrate-CsAnnouncements

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

image

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

image

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

image

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

image

The script will output the announcements it copies

image

Running Get-CsAnnouncement and we can now see the announcements have been copied over

image

and on the target pool file share we can see the audio prompts have also been copied over

image

We can now assign the announcements from the target pool against unassigned numbers and manually failover when needed

image

4 thoughts on “Skype for Business– Migrate-CsAnnouncements

  1. 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

    Like

  2. 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)

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s