Exchange 2010 to 2016 Migration Guide

Hello all,

I just wanted to make sure I keep this migration guide handy. I have been seeing a spike in 2010 to 2016 migrations. This document will be handy:

Other guides include:

The Exchange Deployment assistance will generate a guide for you. Just go through the steps.

That last one requires an email address to get but it looks like it may be useful.








How to make a .ISO File for Drivers or Platform updates for Offline Server 2016


So I hope I captured the mission of this blog With the title. I was trying to update some firmware and drivers over a DRAC/ILO. I found it was quite hard to find a way to wrap your BIOS and CHIP-SET into an ISO file unless that ISO was going to be the size of a Full Van Halen Double DVD! Or worse, I was burning a Default of 6 Terra Bytes or something!



Figure 1. How to make a Small ISO file for your Small Files.

Mea-BiB-Eyetes! (Mebibytes)

So I did the experimenting and I am going to introduce you to something you may not have heard of. Mebibytes!    That’s Mee —    BIB— EYETS!! That is not a unit of weight is it? It turns out this is a unit of Data. So you just have to fool around with getting the right amount of Mee Bee Bites. and your ISO can be whatever size you want!!.

So My research suggest you wont find anything for Free around unless you use IMGBURN. Great! Its got a lot of press online, they say it works but they never told me about the MEE BEE BITES!

So Grab your version of IMGBURN and follow me to BIOS ISLAND!!

How to get a 30 Meg ISO for 30 Meg worth of updates

So Below You will find the basic steps for how to do this magic. I suspect there will  be a video at the top of this Blog that may not be more entertaining, but will be of some help if the instructions don’t make sense.

1. You set the source and choose your files.  (left side of windows)

2. On the right, Clisk on the Advanced Tab. Choose “MEDIA”

2. Set the Profile to Custom.

3. Secret sauce (see screen shot below) Arrows show a sectors to Mebebytes.




  • Set the media tab to custom
  • The maximum sector size is like a guess number
  • SO to figure out what number needs to go there (max sectors
  • Convert the number to the right to Megabytes or Gigabytes.
  • MiB is mebibytes- so the conversion to search google is mebibytes to megabytes.
  • once you know how many megabytes you want the ISO to be, just keep increasing the numbers until the conversion comes up to what you want for the iSO size.

Then hit burn. It worked awesome. I copied Bios and Chip-set to a different server (another one I am working on, and it was perfect. Make yourself an ISO. If you get stuck

I can help you in just a few minutes.


One negative, the first installer had an adware, you just decline it, then you will get a second installer, which is the actual app, no adware, at all, just delete the first EXE and run the second one.

Nothing is installed on the machine with the first download. You may also look at other sites to get it from-


So There is not much to it, but I think watching it happen will make it much easier to carry out. I will put the video up top and make it short for you all. I hope this is helpful!!.

Special Bonus Bootable DVD and Bootable USB

In the video I covered two additional subjects. I explained how to make the Image Bootable in ImgBurn. I also showed a link for how to make a bootable USB with an application named RUFUS. I did not explain that process, but I did show the link to the RUFUS USB Bootable Blog Post.

I hope you left this blog post with what you came here looking for! Have a great day and weekend!

If you need to remember screen shots for burning of ImgBurn, so the ISO becomes bootable, Have a look at this blog entitled “How To Create Bootable Windows 10/8.1/7 ISO From Files/Folders”.

This set of screen shots can supplement the Video and this blog, with screenshots and steps to make a bootable image very possible for all. .


The Way to Decommission your Skype For Business Server s In Perpetuity


I wrote a blog the other night, about renaming your Skype for Business Pool. The joke of the article was you basically have to decommission the server!! The more I got to thinking about the changes in SFB, the more I got to realize the Skype Team is moving in the direction of the Exchange Team as far as decommissioning goes. Truly, if you expect to be able to use your server for a subsequent deployment, your going to have to get all the metadata cleaned up. In order to do this, you really need a good comprehensive removal process.


This is a shot at one anyway. Please comment if you come up with a situation where your not satisfied with my removal steps. I will adjust to make them as comprehensive as I can. Thank you in Advance.

Similar to Exchange Removal steps

Get-CSuser | Disable-CSuser

Get-CsConferenceDirectory | Remove-CsConferenceDirectory

Get-CsExUmContact -Filter {RegistrarPool -eq “lyncpool.your.domain”} | Remove-CsExUmContact

Get-CsRgsWorkflow -Identity:Service:ApplicationServer:lyncserver.your.FQDN| Remove-CsRgsWorkflow

Get-CsDialInConferencingAccessNumber | where {$_.Pool -eq “LyncServerPoolFqdn”} | Remove- CsDialInConferencingAccessNumber

Once you get to this point, you may Remove gateways from topology. But before you do,  that means disassociating them from routes etc. in SFB Control Panel. Go to Voice Routing. and the other tabs, and remove the gateway where ever it may appear. Then then delete it in topology builder.

Check your Progress

Get-CsVoiceRoute | select Identity,PstnGatewayList

Go into topology Builder and right click and choose remove deployment- Follow instructions

Uninstall Databases -There may be several of these commands, depending on what you have installed.

This is the format of the commands you will need to run-

Uninstall-CsDatabase -DatabaseType User -SqlServerFqdn -SqlInstanceName name

Uninstall-CsDatabase -DatabaseType CentralMgmt -SqlServerFqdn -SqlInstanceName name

See for database type below- you may have all these- so just keep runing them until you have the databases all removed!

  • Activemonitoring
  • Application
  • Archiving
  • Centralmgmt
  • Edge
  • Lyss
  • Monitoring
  • Persistantchat
  • Persistentchatcompliance
  • Provision
  • Registrar
  • SignInTelemetry

Now your databases are gone, so you can disconnect the CMS store from the Deployment.

  • Remove-CsConfigurationStoreLocation

Un Prep the domain –

Disable-CsAdDomain -Domain –GlobalSettingsDomainController -Force

Disable-CsAdForest -Force -GroupDomain

You may have to play with the syntax on the last few commands, to get the final steps correct. Don’t be shy. You have the structure, you just need to get the commands to be specific for you now. Good luck and I hope this was of some help.

I suppose the last step is to go into programs and features and remove all the lync applications. This should complete your removal. The final final step is to go into the ADSIedit and choose to login to the configuration partition. You should choose services and then highlight the RTC Service. Right click and Delete it and all its contents.



Testing Skype for Business with Test Cmdlets Script

This gallery contains 2 photos.

Happy Holidays to Everyone, I am trying to put together a little Skype Training class for some New Lync Students. I have found that some of my Scripts had gotten moldy and didn’t work anymore. The Test Skype Script is an important one for a new person to have, So they have some automated tools, […]

SFB Address Book Troubleshooting and Fixes

Hello All,


Let me begin by saying this Blog looks really boring to read. I am adding a Picture to the top so it looks more fun. I know it wont make it any more fun, but at least I feel like a better writer somehow.


This is a picture of a Tea Cup Pit Bull! Yes they do have those. Let me tell you, She is mean as can be as long as she stays near a Blanket !

Back to SFB- Address Books is it broken-> Lets see.

I have been troubleshooting some Lync address book failures this week. I thought I would sit down and write down some of the basic troubleshooting I do to isolate a potential problem. This post assumes you are not running UCS, but It may still be helpful. I would remove UCS for troubleshooting if your having Address Book Problems anyway.

Call Driver Scenarios

First I will put down some basic directions to go based on some early on questions:

  1. 1. Is text in the address book corrupt in some way? If yes, I have seen this issue occur only when UCS had been partially or fully Deployed. Then a migration occurred. If the UCS (unified contact store) had been deployed and you then migrated exchange or Lync Server, your best bet is to do a UCS rollback for Lync. Next Update your Lync Clients, so they are all current, to the version of Server CU. Next, redeploy UCS if your issue is not resolved. Now you will need to wait 24 hours or so for the corruption to be cleaned up.
  2. Is the customer using the ABSConfig tool? This is part of the resource tool kit. You will suspect this if the tool is installed in the environment and the address book is having issues. The first thing to check is if the tool matches the Lync server update version. If the ABSConfig tool is an older version, this is one reason for ABS updates having a problem. Second, Try putting the ABSConfig back to default, and see if that doesn’t help out the issue
  3.  Is there a problem with the way the Text is displayed? In other words are the phone numbers displayed wrong? Is the customer aware of a file called the Company_Phone_Number_Normalization_Rules.txt”? If this file exists in the Share of each pool of the Lync deployment. You may also find a default one created in the C:\Program Files\Skype for Business Server 2015\Server\Core folder. You will need to search the troubleshooting Documents on this, but if you have this file in place, you can over-ride it by using the command

set-csaddressbookconfiguration -identity -IgnoreGenericRules $true

You can also Delete the file, or edit the file as well. See point #4 below. Ken is now telling us this file is not used for Skype for Business If you need to go further here, you can start with his post

4.  So I get the feeling you can use the Company normalization file if you want. If you have to go down that road, I would use this AddressbookNormalizatoin.ps1 tool to do it. It appears to be written for SFB, but I am sure it works with Lync 2013 as well. Normalization tool

5. Contacts, Distributions lists, and presence does have real limitations. Please check out these limitations. You may find your issue may revolve around limits of the application – Application limits

6. The user has reached the Maximum amount of followers. This should not be changed. This is a Default behavior. It can be changed, but is not recommended


Now with those things out of the way, let’s do some simple test for the Address book service:

  1. Test-CSAddressBookService
  2. Test-CsAddressBookWebQuery

The other aspect to test is can your client get the web service URL? You will get a login pop up. It will fail. But if you don’t get a 401 or don’t get the prompt, then you know this issue is at the directory:

Does the Web Contacts work

  • The Address Book Configuration- Get-CsUserReplicatorConfiguration
  • Look for the LSABS files in the command below. You can delete these out of the folder to make sure they are being created. If they are then next…
  • Are the Files on the server being generated- run this command to see those files-

abserver -dumpfile “\\\SQL2012BE\hello\1-WebServices-1\ABFiles\00000000-0000-0000-0000-000000000000\00000000-0000-0000-0000-000000000000” c:Tempaddress-abs.txt

To check these things you may need to force initiate the address book replication:

  1. Update-CsAddressBook
  2. Update-CsUserDatabase -Force

You may also not be aware there are two mechanisms for the address book. One uses a file cache. The other users a live web search. You can use one at a time, or you can use both. The default is to use both. Here is how to force the use of only the web look up. This will tell you if the web look up is working.

The default value for SFB Client policy is WebSearchAndFileDownload

What your going to do is run the following command.

Get-CsClientPolicy | Set-CsClientPolicy -AddressBookAvailability WebSearchOnly

Once this is done, perform your update CS commands and wait. This may take a little bit for the policy to filter down. You can change the command back, but this will take a while to switch, either way.

Client Side

Now if you have checked the Server and you don’t see any failures there, you should next clear out the cache files on the client and try to initiate a new address book download. Do this by deleting the following files:

GalContacts.db and GalContacts.db.idx. In Lync 2013 this is a file called ABS__sipdomain.cache

Forrest Level

There is an unusual circumstance where contacts will not update if they are not in the correct Domains list.

More on this in another article.

# Add domains

Set-CsUserReplicatorConfiguration -Identity global -ADDomainNamingContextList @{Add=”dc=domainA,dc=local”,”dc=domainB,dc=Com”}

# Remove domain

Set-CsUserReplicatorConfiguration -Identity global -ADDomainNamingContextList @{Remove=”dc=domainB,dc=Com”}

To conclude, there is a lot here in just troubleshooting the Address Book Update. This is by no means an exhaustive document. However, It does give you a place to start, and hopefully with these commands I have used for a while now, you will get a foothold into the failure, and you may be able to get down to a possible solution.

In closing I will add that the Address Book service itself is not usually a problem. The one issue I run into over and over again was from Lync 2013 Updates, around the time SFB came out. There was a patch in there, where the update caused web services a bad time In IIS. The advice is just to make sure you are up to date on your Lync 2013 Updates. Also Skype for Business should not be RTM at this point. SFB needs to be at the current CU, and you should not have any issues, with the Address Book. This also means update your Client!!

Thank you,



Warning :No Databases were found for mirroring or witness setup for SQL server SERVERNAME and Instance PCHAT


This little nugget of an error occurs when you use the Skype for Business Topology Builder to Install Persistent Chat. The scenario where this error is relevant is when you have two Lync Sites and you have setup High Availability and Disaster Recovery. It just so happens this is also a Persistent chat Stretched Pool. I have spent considerable time trying to understand the underlying behavior. I hope I have gotten enough facts to help you avoid spending a bunch of hours trying to get Microsoft Support to fix it.

Before I start, I want to say This exercise has taught me that the Always On Availability group is a much more elegant solution for High availability and helps simplify Disaster recovery too. At the time of this reading, Always On Availability was not supported for Persistent chat. But I thought I would mention, it may be best to keep Persistent chat down to its basic essence and just do good backups. I am about to share with you why Mirroring and log Shipping is not a perfect solution for SKYPE for Business Persistent chat (from the topology builder)

The primary disparity comes in looking at the TechNet design vs. the Different Setup Documents you find available online:

Persistent Chat Configuration Configuration DR

Vs . The Deep Dive example by Richard Schwendiman.

By comparing the two Graphics of the Design, you can clearly see that the HA and DR for Persistent chat, Is defined, over and over, In a fairly straight forward design, which includes only one Mirror Database in the in the primary Site. This Primary Site is laid out below:

Figure 1. HADR database SetupUntitled

In contrast, you notice both Sites show 2 SQL mirrors. The Tech-net Documentation shows only one mirror. Channel 9 videos only show one mirror. I will now Juxtapose the Tech Net Document on the Same Design for SQL mirror setup.

Notice below, the SQL backup database is the log shipping target database. This Log Shipped database, is something you define in the Topology Builder, and constitutes the Disaster recovery copy of the Persistent chat database

Figure 2. TechNet Setup for HADR or Persistent Chat1230

In these small differences, there is a bug or a limit to the software. You will be able to publish the topology Builder, with either setup. However, Since the persistent chat Principle databases is log shipping to SQL backup, the Database state of the SQL backup database with be in recovery, on a permanent basis.

Since this is always recovering, the secondary mirror and witness will not be able to handle any commands from the topology Builder. you will get a failure if you try to “Publish Database” to the Secondary Site.

One of the errors you will see is Warning :No Databases were found for mirroring or witness setup for SQL server SERVERNAME and Instance PCHAT:



This is by design! The Secondary settings are there, because they can be used when and if you actually do the fail-over process, to execute the Disaster recovery steps.


This is the screen where you will make your setup, and because of the lack of documentation, you will not realize two of the three entries here, are not going to work as the Back Up SQL store is going to work, when you publish  the topology.

The choices In the Red square above, Are not going to be functioning, accept for the Backup SQL server Store. This is the Log shipping database, as a result of being published, the Backup database, can be the recipient of the log shipped transaction log files.

  1. Because that databases is a log shipped database, the Mirror of this and the Witness cannot be working, because the Lync Services will basically be turned off, until the Lync Services are needed. Once you fail over the Primary Database, you may then use the Mirror and the Witness defined in the Topology. Until Failover, they will lay dormant!

This is a limit to how the Lync HADR process works. The only documents I could find on this issues was the following 2 articles:

Basically what these two links show is that If you set up the HADR as the Figure 1 setup, with a SQL mirror at the secondary Site, That mirror will not work, based on the log ship copy of the Persistent chat Primary Database. The log shipped databases will be in recovery at all times, as it is always changing, based on the constant updates.

To solidify this phenomenon, here is a Link the expresses this condition hereHow to back up the secondary log shipping database. If you notice, it looks like the Always on is the solution to this problem. Hopefully this is supported for Persistent chat soon!

Otherwise, this is largely manual process, whose goal is to allow the second data center to be able to take over persistent chat, based on several manual configuration changes, laid out in these articles:

Once you have failed over the persistent chat pool to the DR site, you may then reconnect the Pchat database, Mirror and Witness on the DR server. The gotcha is you will not be able to do it before.

Automation is not built into the DR procedures.


To conclude, I would really recommend you stay within the supported DR guidelines for HA ad DR with the Persistent chat pool. SFB had consolidates the steps (Over Lync 2013), so use the links above and you should be able to configure Persistent chat as a best practice. Originality will not likely pay off in this endeavor.

It looks like you may be able to have two mirrors in two Data Centers. This would not be directory supported by Microsoft. However, below are some possible helping steps if you wish to try:


  • SQL instances should both be in the same domain, as should both Sites.
  • Configure Chat permissions – User must be a member of CsPersistentChatAdministrator. To change policy, user must be in CsUserAdministrator, at a minimum.
  • All SQL databases need to have a domain account, with Admin permissions, common to all SQL instances involved with PCHat.
  • The Sub-net should be on the same sub-net.
  • There can only be one active Persistent chat primary database, at any given time, in the forest.
  • If the SQL Server service account on your primary server runs under the local system account, you must create your backup folder on the primary server and specify a local path to that folder.
  • to change log shipping, you have to fail over the mirror in the primary Chat Database.
  • The only time the Second PChat Mirror is used is in conjunction with Disaster recovery. is “with an optional mirror to provide high availability during disaster recovery” The words indicate that second mirror is only used when the DR process is being manually carried out.
  • There was a Gotcha in how you added the Databases and mirrors in the Topology builder.Review in case it comes up in your setup

Finally, this comes from Channel 9, which confirms the two way Mirror for Persistent chat is not showing up in design and configure documentation:

notice it does not say SQL mirror pair in both Sites.


I hope this is helpful in dispelling what Lync and Skype for Business will accept as far as the Supported HA and DR, when they are both set up and how they are set up.

To conclude, you may be able to manually make the log shipped Database, work with the secondary mirror and witness. This will generally require manual intervention, and may not be supported with MS and Skype foe Business. You can try to recreate the end point and manually initiate the mirror. However, you will need to break the supported configuration in able to make it work. Here are a few links to look at:

Move”the CMS from 2010 to 2013 (or SFB) when those databases are destroyed or Move-CsManagementServer Fails AKA How to move CMS from 2010 to 2013 when CMS is Dead.


Hello and happy summer day. This article is about a subject you wont find documented around the internet much, and is not Directly Microsoft supported. With that said, I will present you with the Microsoft way and the emergency way, to save your 2013 Lync  install when the 2010 has been Broken.

First of all. Have Back Up. In this situation, the customer did not have a back up, but it certainly is a good Idea. So the first method you should use, if you loose your 2010 Back end Databases, is to recover them from back up.

Second, Recreate your SQL server.The official documentation you will find if you loose your back end for 2010, is to Recreate the SQL 2008 server, and install an instance of SQL with the same name. From there, you can use install-CsDatabase –CentralManagementStore to recreate the Back end database on the new server.

Third, Lets say you are in a situation where neither of the two above are possible? So the mantra is you are normally going to run the command:

Move-CsManagementServer to move the CMS from 2010 to 2013. This process is how you might be able to move forward, eliminating your 2010, even if they are down. There needs to be said that you can forget about saving things like contacts, response groups, etc..  this is a bare knuckle procedure to get you from 2010 CMS to 2013 CMS, without loosing both installations.

Current Situation

In this situation, you will find the 2010 and 2013 topology builder will not download the topology. You cant make any changes and the Lync control panel wont work. You are really in bad shape.

Steps to move from non existent 2010

What is going to save you here is a copy of your topology and the copy of your configuration. I don’t know that you can do this without a copy of your configuration so lets have you make a copy to back up now.

  • Export-CsConfiguration -Filename
  • Export-CsLisConfiguration -FileName C:\LISConfig.bat

Most of you wont have the LIS configuration and that’s ok. You will see the work around here in a second.

1, Get-CsManagementStoreReplicationStatus –CentralManagementStoreStatus

This command is going to fail because your pointed to your 2010 CMS currently. So this is procedural

2. Export-CsConfiguration -Filename –localstore

#2 is the file we are going to recover from. keep it.

If you had not run install-CsDatabase already, this is part of the migration steps, just before you move the management server

3. Install-CsDatabase -CentralManagementDatabase -SqlServerFQDN Nameofserver -SQLinstancename Name -Clean –Verbose

4. Move-CsmanagementServr -ConfigurationFilename –force-verbose

#4 above is only partially successful, as we did not use any LIS configuration, so elements will fail. However, some will succeed.

here is where it gets creative. Create a folder called LIS.BAK.  Place an empty file inside the folder and zip it. This zip file will be required to make the next command succeed.

5. Move-CsManagementServer -ConfigurationFileName -LisConfigurationFilename -Force –Verbose

Number 5 is your magic command. this command is able to move your CMS to 2013, without the 2010 database. This was pretty amazing.


This is the steps as I recall, and this should get you moved over to 2013 for CMS. Now you will have to remove the 2010 objects to get topology published with only the 2013 Topology items being there.

SO below, for completeness, I have my rough notes on the last time I did a full CMS move and decommissioned the 2010 server. I have also included some Links I used to make sure I was doing the steps correctly. That is all posted below:

JUST FYI the above process only replaces step 2. So you still have work to do. However this gives you some context in to how the process fits into the whole 2010 decommission.

  • 1. # Install-CsDatabase -CentralManagementDatabase -SQLServerFQDN “BackendEnd FQDN” -SQLInstanceName RTC
  • 2. Move-csmanagememntserver
  • 3. Move-CsManagementDatabase –verbose
  • 4. Run step 2 on lync 2010 deplyoment wizard- Run Step 2 to remove Lync Server Components
  • 5. Get-CsManagementConnection
  • 6. Check new topology-builder-
  •  7. Go to 2010 LMS- Uninstall-CsDatabase -CentralManagementDatabase -SqlServerFqdn -SqlInstanceName RTC –verbose
  • 8. Remove-CsConferenceDirectory –Force
  • 9. Remove mobility from programs and features 2010
  • 10. Remove- lync 2010 from 2013 topology and publish


I hope this article is helpful. Please remember this is not an MS supported change. Options one or two are the main ways you would deal with this situation. Have a great weekend:


Sources I had used at one time for my CMS steps