I don't remember performing some weird ritual when I originally wrote SPSiteManager, but it must have some weird possessive attribute engrained in it. I was just about ready to take the 2.0 version out of the oven, stick a fork in it and call it done when I got a wild hair up my butt to add Cross Virtual Server support.
Cross Virtual Server support was always a feature sitting in the back of my mind. It was back there, just a doin' it's little happy dance going "Implement me! Implement me!" ever since I first wrote SPSiteManager. I just knew it would be an undertaking, and there were other things that I really wanted to do first:).
It should also be no secret that my ultimate goal is combining the functionality of SPSiteManager and SPUserUtil (Along with some other really cool things) into a future tool I’m working on, but I was holding off on implementing Cross Virtual Server support until I was finished with this round of updates for the SharePoint Utility Suite and began to work on it.
Alas, the itch got to me......the voices in side my head would not shut up.
"Implement me! Implement me!" they shouted.
(Perhaps it's because of all the Stephen King books I've read that I'm hearing those voices....hmmmmm)
Anyways, I emailed the internal distribution group I had created to beta test the next release of the suite on Wednesday of last week with the thought of this feature idea, and asked them to vote yes or no. A vote for Yes was pretty much unanimous 🙂 (well.....One person voted no, but I called them and twisted their arm and explained it in more detail and then they went "Oh, heck yeah!"). Off I went on Saturday and today to implement it, implement it!!!
The addition of this functionality was WELL WORTH the time IMO; the end result was even more than I could have imagined; and I nearly re-wrote the entire architecture for SPSiteManager in the process thus setting the stage to make it multithreaded in a future release (multithreaded where appropriate of course. Primarily for the analysis routines).
The end result was:
- A ton of code becoming more generic
- Every action is now considered a job and a job object is used with each.
- Cross Virtual Server support is enabled via the –allvs switch, and is even more extensive then I originally described or could hope for.
- In one invocation of SPSiteManager you can do the following using either a site name mask with the –allvs switch or a SDD:
- Analyze every site across the farm. The analyze operation can now be set to run against all virtual servers.
- A new container element <virtualserver> surrounds the <contentdatabases> and <sites> elements to separate contentdatabase and site elements into their respective virtual servers.
- I’m considering rolling up the <doctype> counts for each virtual server into a global <doctype> element to give the end user an overview of the types of documents in the system from the farm level.
- A <doctype> element gives you a count of the number of documents of the given type exist in your system, and the ratio of how many are as List Attachments vs. Document Library items.
- Repartitioning across Virtual Servers. (For me this is one of the slickest features!!)
- You can move a site from one virtual server to another, while changing the URL for the site
- Any content databases that you specify that does not already exist will automatically be created for the target virtual server as needed!!!
- In my testing scenario, I moved a series of sites form the primary portal across to 4 other virtual servers in one invocation of SPSiteManager using a SDD file.
- Depending on your options you can effectively restructure the site distributions in your entire farm with one simple invocation.
- Mind you, not that any sane person would do that with literally 10,000’s of sites 🙂 Remember, with Great Power comes Great responsibility!
- Backup/Delete/Restore sites across your farm
- Lock/Unlock sites across your farm
- Reset quotas for sites across your farm using either command line values, or from quota templates.
- Add/Remove sites from across the farm to a Portals Site Directory and List of Sites to Crawl
- Lot's of other cool stuff to be documented later 🙂
Aside from the Cross Virtual Server features, the analysis engine provides a ton of more detail as well that I've already hinted at, and will provide more details in a future posting.
Adding some multithreading features to the analysis engine will be in a version AFTER this one gets into the public release of the Utility Suite.
Hmmmm....Multithreaded analysis engine....
"Implement me! Implement me!" the voices inside my head shout.