Sunday, November 5, 2017

RESOLVED: Index was outside the bounds of the array when moving to Skype Online

Greetings tech fans....I was recently trying to move an on-premises Skype for Business account to Skype for Business Online and after authenticating to Office 365 I received an error indicating the account could not be moved followed by this message in Control Panel:

I've recognized this error before being related to the account in the tenant not having a Skype for Business license however in my case I was sure to license it beforehand. After looking at the account in Azure Active Directory I realized the SMTP reply-as address was set to the vanity domain FQDN and not the proper suffix used by Skype for Business. In my case, this was a 'pure Online' user meaning their mailbox and Skype accounts would both be in the cloud even though the AD account itself started life on-premises.

When the account is moved from on-premises to Online, the SIP address must match the SMTP reply-as address for you to successfully move the Skype for Business account in a hybrid deployment.

You might say "why not change your default domain in Office 365 to be your vanity domain?". This would indeed solve the problem as the primary SMTP address would always match the SIP URI however you cannot make a vanity domain the default if it is a federated domain (which mine is).

So ultimately we need to 'prime' the on-premises AD account with the correct reply-as SMTP address for the account to be moved to Online.

You can do this by starting Active Directory Users & Computers and clicking the View tab then choosing Advanced Features. Locate the user you want to modify by navigating the directory tree. Don't search for them as the tab we want to display won't show up if you do it this way. Once you locate the user, click the Attribute Editor tab, scroll down to "proxyAddresses" and add the words "" (making sure you use capital letters for the word SMTP) substituting your user's primary email address as follows:

Click the Add button then click OK twice to save. Perform a manual sync of AD (optionally wait for the next sync cycle) by logging into your Azure AD Connect server, opening an Admin-mode PowerShell window, and keying in the following:

Import-Module ADSync
Start-ADSyncSyncCycle -PolicyType Delta

Wait about five minutes, then check your user's SMTP address in Office 365.

Here is the before screenshot:

 Here is the after screenshot:

Now you can try the move again and it should succeed:

Let me know if you also experience this issue or if you have another workaround.


Tuesday, June 13, 2017

Introducing CxdCallData for Skype for Business Online

Well folks this is my first post in a long time but it's a good one. I've been working on a PowerShell module to extract call data, rate my call (RMC) data, and a host of other great information retrievable from Skype for Business Online.

If you're new to PowerShell Gallery, get your read on here: Otherwise, it's essentially a Git repository for publicly hosted scripts and modules all searchable from PowerShell 5.0. After writing this module a few times, collecting feedback, and dealing with version nightmares and co-development woes, I adopted a new working style and environment. More on that later on...


  1. This module does not support authenticating with an account prior to executing the main cmdlet. This is because the cmdlet will ask for credentials then save them as a variable for subsequent logon attempts. We need to do this because the Skype for Business Online module will only retrieve an 'access token' for 60 minutes before the PowerShell Session expires. The CxdCallData module will account for this and re-authenticate/re-import the PSSession prior to the access token expiring. If you authenticate beforehand, the credentials are not gathered, nor stored for re-auth.
  2. Since we need to re-auth every 60 minutes, the module also does not support accounts with MFA enabled. MFA-enabled accounts do not support saving credentials.

Finding the module

So here we go, to find the module you'll need PowerShell 5.0. To use the module you'll need the SkypeOnlineConnector.

PowerShell 5.0:

Chances are you'll have to install a NuGet provider before you're able to find the module on PowerShell Gallery. No problem though, as you'll be prompted to install it automatically at first launch. Simply specify "Y" at the prompt to install the package provider.

Open an admin-mode PowerShell 5.0 session after installing the NuGet provider and type: "Find-Module CxdCallData". This will show you the current version(s) and the repository location.

Installing & importing the module

Run "Install-Module CxdCallData" and accept the untrusted repository message. Load the module by running "Import-Module CxdCallData".

To view the loaded module, run "Get-Module CxdCallData".

Using the module

There is only one exported function called "Get-CxdCallData". You can get full help and examples by using "Get-Help Get-CxdCallData" once the module has been installed and loaded.


Get-CxdCallData -NumberOfDaysToSearch 180 -CsvFileWithUsers C:\users.csv -ReportSavePath C:\reports

Get-CxdCallData -NumberOfDaysToSearch 90 -ReportSavePath C:\reports -Verbose

The reports generated are in both CSV and HTML format for easy viewing on a server or desktop with Office installed.

Updating the module

PowerShell 5.0 lets you update a module from PowerShell Gallery simply by running "Update-Module CxdCallData".