Moving the SMSSIG$ and SMSPKGSIG folders in SCCM

Just by reading the title of this post you can rest assured that the s**t hit the fan on one of my SCCM Primary Sites today!  One of our drives was almost full and it turned out that the SMSSIG$ folder was the culprit.

First you should ask yourself, how did this happen?  How did I get here?  Same as it ever was.  Ahh….I digress. 

Well, for starters you should have the No_SMS_on_drive.sms file in the root of all drives that you don’t want SCCM to use.  For Distribution Points SCCM uses the drive with the most amount of free space.  Once that drive fills up it will use the next drive with the most freespace.  I am not sure that was my issue since I did have that file in the root of the drive that was filling up.  But, I certainly could have put it there after the SMSSIG$ folder was created.

The next step is to ensure that the Site Settings > Component Configuration > Software Distribution > Location of stored packages has the drive letter of the drive you want the SMSSIG$ folder on.  In my case it was set to Z:\.  I don’t have a Z: drive.  At this point you are probably asking yourself “Hey Matthew, what kind of shop are you running there?”.  I don’t know really!  But, I do know how to fix the issue.

First I Googled “moving SMSSIG$ folder” and came across this article:  http://www.myitforum.com/articles/1/view.asp?id=12833

You will notice that the article states that the SQL Update command has to be run for each packageID.  Well, I had over 300, so like, um….yeah…that wasn’t happening.

Enter our best friend PowerShell.  Here is the PowerShell script based on the article above.  You will see that I am changing the drive from I$ to H$.  Note:  read the article above, don’t just execute the PowerShell code.  The article states that this should be done on all of the parents of the site in question.

Add-PSSnapin SqlServerCmdletSnapin100
$SQLCMD = Invoke-Sqlcmd "SELECT * FROM PkgStatus WHERE Sitecode = 'p01' and Type = 1 and location like '%i$%'"
foreach ($i in $SQLCMD)
	{
	$NewLocation = $i.location.replace("I$", "H$")
	$NewLocation = "'" + $NewLocation + "'"
	$i.ID = "'" + $i.ID + "'"
#	$i.ID
#	$NewLocation
	$NewSQLCMD = "UPDATE PkgStatus SET Location = $NewLocation WHERE Sitecode = 'P01' and Type = 1 and ID = " + $i.ID
	$NewSQLCMD
	Invoke-Sqlcmd $NewSQLCMD
	}

Then I figured I better move the SMSPKGSIG folder as well.  Instructions here:  http://www.myitforum.com/articles/1/view.asp?id=11981

I followed all of this up by creating a package and sending it to the DP in question and all is well.