Tim Dobrinski’s SharePoint Space Monitor

While searching through the Technet SharePoint forum, I stumbled upon a post/question regarding how to find out how much data your subsites are using. I remember from the SPS 2003 days that there was a aspx page that would show this ( _layouts/storman.aspx), which actually still exists in MOSS, but is accessible ony if you have a storage quota defined on the site collection (maybe it was also the case already in SPS, but I am not sure). It is accessible though the Site Settings page listed as a link called storage space allocation

Well, Tom Dobrinski developped a tool that allows you to get this information regardless of the fact if storage quotas are enabled or not. Even more he has made it available free of charge, but you are kindly suggested to make a small donation (5$) to get a everlasting key for the tool. Otherwise you will have to drop Tim a mail requesting a key every 4 months or so…

Go check his blog for the tool called the SharePoint Space Monitor if you think it might be usefull to you.

Extract the installed solutions from the MOSS farm (updated)

I was looking today for a way to get all the original wsp and cab files that have been installed into a MOSS farm. Of course not everybody keeps track of where the original files are the same way. Certainly if there is a team that is managing the same MOSS farms, your original files get lost very rapidly, or you can find the files on the filesystem, but there are so many versions of them. which one is the latest and the version installed?

So I was thinking that there should be a way to extract them from MOSS directly. Of course there is no OOTB way to do this, but I found some code that allows you to do it. The piece of code was posted on a Technet blog comment

I basically took this code and wrote a small Console Application around it so I could use it on my systems.

*** UPDATE March 23rd 2009***

Once I had created my little tool to extract the solutions, I noticed that it would also be great to know what the properties are of the solutions. Where were they deployed to, etc. Therefore I added some code to generate in addition to the solution files also a corresponding xml file containing that information

I will share my updated code:

using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.SharePoint.Administration;

using System.Xml;

 

namespace SolutionExtractor

{

    class Program

    {

        static void Main(string[] args)

        {

            if (args.GetLength(0) == 0)

            {

                Console.WriteLine(“Usage: SolutionExtracter.exe <path to save solution files>”);

                return;

            }

            string path = args[0].ToString();

           

            bool checkIfDirExists = System.IO.Directory.Exists(path);

            if (checkIfDirExists == false)

            {

                Console.WriteLine(“path “+path+ ” does not exist”);

                return;

            }

 

            SPSolutionCollection solutions = SPFarm.Local.Solutions;

 

            foreach (SPSolution solution in solutions)

            {

                SPPersistedFile wspFile = solution.SolutionFile;

                Console.WriteLine(“Saving “+path +“\\” + solution.Name);

                wspFile.SaveAs(path +“\\” + solution.Name);

               

                Console.WriteLine(“Saving properties to “ + path + “\\” + solution.Name + “.xml”);

                string filename = path + “\\” + solution.Name + “.xml”;

                XmlTextWriter tw =new XmlTextWriter(filename,null);//null represents the Encoding Type//

                tw.Formatting=Formatting.Indented;  //for xml tags to be indented//

                tw.WriteStartDocument();   //Indicates the starting of document (Required)//

                tw.WriteStartElement(“Solution”);

                tw.WriteAttributeString(“Name”, solution.Name);

                tw.WriteStartElement(“Properties”);

                tw.WriteElementString(“Added”, solution.Added.ToString());

                tw.WriteElementString(“ContainsCasPolicy”, solution.ContainsCasPolicy.ToString());

                tw.WriteElementString(“ContainsGlobalAssembly”, solution.ContainsGlobalAssembly.ToString());

                tw.WriteElementString(“ContainsWebApplicationResource”, solution.ContainsWebApplicationResource.ToString());

                tw.WriteElementString(“Deployed”, solution.Deployed.ToString());

                

                tw.WriteStartElement(“DeployedServers”);

                foreach(SPServer s in solution.DeployedServers)

                    tw.WriteElementString(“Server”, s.Name);

                tw.WriteEndElement();

               

                tw.WriteElementString(“DeploymentState”, solution.DeploymentState.ToString());

                if (solution.DeploymentState.ToString().ToLower() != “globaldeployed”)

                {

                    tw.WriteStartElement(“DeployedWebApplications”);

                    foreach (SPWebApplication w in solution.DeployedWebApplications)

                        tw.WriteElementString(“WebApplication”, w.Name);

                    tw.WriteEndElement();

                }

                tw.WriteElementString(“IsWebPartPackage”, solution.IsWebPartPackage.ToString());

                tw.WriteElementString(“SolutionId”, solution.SolutionId.ToString());

              

                tw.WriteEndElement();

                tw.WriteEndDocument();                                 

                tw.Flush();

                tw.Close();

            }

 

        }

    }

}

 

 

 

So after running this code you will find all the solutions accompanied by an xml file with the properties like this:

 <?xml version=1.0?>
<
Solution Name=mySolution.wsp>
  <
Properties>
    <
Added>True</Added>
    <
ContainsCasPolicy>False</ContainsCasPolicy>
    <
ContainsGlobalAssembly>True</ContainsGlobalAssembly>
    <
ContainsWebApplicationResource>True</ContainsWebApplicationResource>
    <
Deployed>True</Deployed>
    <
DeployedServers>
        <
Server>MOSS01</Server>
        <Server>MOSS02</Server>
    </
DeployedServers>
    <
DeploymentState>GlobalAndWebApplicationDeployed</DeploymentState>
    <DeployedWebApplications>
       <
WebApplication>SharePoint – WebApp1</WebApplication>
       <
WebApplication>SharePoint – WebApp2</WebApplication>
    </
DeployedWebApplications>
    <
IsWebPartPackage>False</IsWebPartPackage>
    <
SolutionId>eb07011e-3898-4d51-8e23-008a890c6549</SolutionId>
  </
Properties>
</
Solution>

For Those of you that do not want to start developping or compiling this peace of code, you can download an updated compressed version of it attached to this post.

Short overview of MOSS new installation order with Language Packs

Just wanted to add this to my blog, because I have been asked this twice already last week. The order below is the one I use when I have to install Language Packs. Basically I prefer installing in the same order as the updates have been released. In Belgium we are customed to install 3 languages: English, Dutch and French. Hence this post

First of all install the prerequisite software for Windows Server 2003:

IIS 6.0
Asp.Net 2.0
.Net Framework 3.0

Then start the installation of MOSS and updates:

Install MOSS (English and without SP1)
Install WSS language pack French x86 x64
Install MOSS language pack French x86 x64
Install WSS language pack Dutch x86 x64
Install MOSS language pack Dutch x86 x64
install WSS 3.0 SP1  x86 x64
install Moss 2007 SP1 x86 x64
Install WSS SP1 language pack French x86 x64
Install MOSS SP1 language pack French x86 x64
Install WSS SP1 language pack Dutch x86 x64
Install MOSS SP1 language pack Dutch x86 x64
Install Post-SP1 WSS Infrastructure update x86 x64
Install Post-SP1 MOSS infrastructure update x86 x64

I have added the link to the MS download site for each individual update as requested by a colleague of mine.

Remember that you do not need the Configuration Wizard at each step. Some of the updates automatically start the wizard. Just simply cancel it out and continue installing the rest of the updates. What I always try to keep in mind is to install the updates for WSS first and then continue withthe MOSS counterpart.

Another little thing to remember is that you can get the language packs form the Microsoft download site for free.

Change the default 10 MB limit for saving a site as template

I bumped upon this 10 MB limit today when trying to save a site as a template. Did some research on the net and found that you can change this limit through the following stsadm command:

stsadm -o setproperty -pn max-template-document-size -pv 524288000

This will set a 500 MB limit instead, which is apparently the maximum value you can specify.