Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Is there an stsadm() command (or some other method) that will show everywhere that a Solution is being used. I would like to get the results in a list using either the solution GUID or the fully qualified name (like CorasWork.Workplace.WebParts.ActionLauncher...)

I found the stsadm() operation enum solutions which was very helpful, but it does not show you what sites or pages that a control is being used on.

How can I get that information?


share|improve this question

No there isn't an out of the box way of doing this - you'd have to code it. Now this isn't a sales pitch and the tool isn't commercially available or even commercial quality but I do have a content analysis tool I wrote that does what you ask and a lot more besides. Basically I use the tool to analyse new clients farms and especially close to a migration so that I know what lives where and have a grasp on the types of content they store and how well they store it. ANyway, as an example here is a snippet of what you might do:

    public XmlDocument CreateAssetLibrary(string siteURL, Delegate callback)
        //Set up the XML and go get the data
        XmlDocument doc = new XmlDocument();
        XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null);
        var pi = doc.CreateProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"contentanalysis.xsl\"");

        using (SPSite siteColl = new SPSite(siteURL))
            using (SPWeb web = siteColl.OpenWeb())
                web.AllowUnsafeUpdates = true;
                XmlElement sitecollections = doc.CreateElement("sitecollections");
                SPWebApplication webApp = web.Site.WebApplication;
                totalSites = webApp.Sites.Count;

                foreach (SPSite site in webApp.Sites)
                    started = DateTime.Now;
                    websProcessedThisSite = 0;
                    totalWebsThisSite = site.AllWebs.Count;
                    webCount = 0;
                    listCount = 0;
                    itemCount = 0;
                    fileCount = 0;
                    listItemCount = 0;
                    userCount = 0;
                    groupCount = 0;

                    //initiate the global profile hashtable with a catch all entry for non-file based content (i.e. SPListItems)
                    globalHash.Add(nonFileID, new ContentItem(nonFileID, 0, 0));
                    SPWeb currentWeb = site.OpenWeb();
                    XmlElement sitecollection = doc.CreateElement("sitecollection");
                    sitecollection.SetAttribute("sitename", currentWeb.Title);
                    sitecollection.SetAttribute("link", currentWeb.Url);
                    XmlElement structure = getXML(currentWeb, doc, callback);
                    XmlElement profile = getProfile(doc);
                    XmlElement stats = getStats(doc);
                    callback.DynamicInvoke(new Object[6] { doc.InnerXml, Convert.ToInt32(totalSites), Convert.ToInt32(sitesProcessed), 0, 0, doc });
                web.AllowUnsafeUpdates = false;
        return doc;

The easy thing to do would be to report on which SITES or WEBS were using a feature / solution. Harder would be per-page - you'd extend this to go through each page in the library and inspect the metadata to esatblish the features being used.

share|improve this answer
Andy,how would I go about getting that content analysis tool? Seth – Seth Spearman Sep 26 '11 at 14:32

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.