Enterprise To Standard SharePoint License Migration

So, it has become a standard for a particular project that I am involved in that we are not going to be using the Enterprise Features of SharePoint, therefore we have to convert license types. It is blatantly labeled as an unsupported upgrade in several locations, but ah-ha!, there is a little note saying:

“You cannot return to using the Standard feature set after you have enabled the Enterprise feature set. If you want to return to using only the Standard features, you must turn off all of the Enterprise features on all sites. Alternatively, you can uninstall Office SharePoint Server 2007, reinstall it by using the Standard license type and create a new server farm, and then attach the content databases to the new farm.”

The second option, although it seems like it would work, is not very attractive to me. I have done attachment scenarios a lot, but not really throughout different licensing schemes. That freaks me out, along with the related downtime and weekend working that it implies.

The first option though seems like a cakewalk. Regardless that the environment is a beast, I can easily automate the feature deactivation process programmatically. This should just be removing it from the Features collection of the web objects I am going to get a reference to.

Once I get a reference to the web application collection and get any web application I care about:

Collection webappCollection = new Collection();
SPWebApplication webapp = SPWebApplication.Lookup(new Uri(“mySite”));

I should be able to iterate through all the SPWeb objects and use the Remove method against the Feature GUID. This part is funny about working with SharePoint Features I always thought. If you are working with the add or remove method against something like an SPFeature instance, you pass in the GUID. I understand the purpose, its just a quirk I suppose. I also added some logic to deactivate any chained features that establish depedencies across the the enterprise feature set in order to handle any dependencies. Some funked out, otherwise were successful, so I am assuming that it is required.

Features.Remove(new Guid(“PremiumFeatureID”))

I threw it together in a small console application and it worked. Alright! I went and verified that it had been turned off in a few test locations. This is stupendous; I avoided bloody fingers from clicking so much that band-aids were required.

So, now I jump into WCAM and go to switch my license. Ok, switching the license doesn’t work, how about I switch that radio button around that normally enables enterprise features and then put in my license. That isn’t working so hot either.

Maybe its my environment, so I build a fresh VM instance with MOSS on it, use the publishing template, remove all the sites I don’t care about, then go manually through my three web applications and relevant site collections disabling enterprise features one by one. Now I am sure that I have gotten it to work, and wrote a small console application to enumerate through all of my relevant site objects, so I am certain they are off now. It is just doing something like:

foreach (SPFeature feature in myWeb.Features)

I am certain, 100%, that all I care about has been deactivated now. However, I go into WCAM, and follow the same routine that I talk about before. Same result!

Oh well, I will be continuing my investigation into unsupported land, and if I find a viable solution, will post it here. I am not exceptionally hopeful at this point.

I hate licensing!