Managing SharePoint 2010 Farm Solutions with Windows PowerShell

In SharePoint 2007, you can manage solutions using the stsadm command. In SharePoint 2010, stsadm still works, but is deprecated in favor of PowerShell cmdlets. Whereas with stsadm you use a command-line switch to specify the operation to perform, with PowerShell you use separate cmdlets. Below are the list of stsadm commands and equivalent PowerShell commands for common tasks to manage a farm solution. SharePoint 2010 also includes support for sandbox solutions. While they are not discussed here, you’d use similar cmdlets to manage them as well.

When running a cmdlet, the cmdlet returns right away, but the operation will take some time to complete. If you attempt to execute one cmdlet immediately after another, you may get an error if the previous operation hasn’t finished running.

To get further information on a cmdlet, for instance add-spsolution, just type get-help add-spsolution in PowerShell.

Starting the SharePoint PowerShell
You can find the SharePoint 2010 Management Shell under the Microsoft SharePoint 2010 Products program group. You should run it as the farm administrator account. Otherwise, you would get the following error:

The local farm is not accessible. Cmdlets with FeatureDependencyId are not registered.

Adding solution to the solution store

Prerequisite: None

stsadm -o addsolution -filename SampleSolution.wsp
add-spsolution -literalpath c:\solutions\SampleSolution.wsp

Because of the way PowerShell handles file path, the cmdlet’s -literalpath switch only accepts a full path to the WSP file. Using a relative path will result in a File Not Found error.

Deploying solution

Prerequisite: The solution has been added to the solution store.

stsadm -o deploysolution -name SampleSolution.wsp -url http://server -allowGacDeployment -force  -immediate
stsadm -o execadmsvcjobs
install-spsolution -identity SampleSolution.wsp -webapplication http://server -gacdeployment -force

This solution contains an assembly which must be registered in Web.config (as a SafeControl), so I use the -url switch with stsadm to specify the location of the desired Web application (to which Web.config belongs); alternatively, I could also use the -allcontenturls switch to deploy to all non-administrative web applications. With PowerShell, the -webapplication switch performs the same purpose.

With stsadm it’s also a good idea to run execadmsvcjobs to ensure that the operation is performed immediately. The cmdlet performs this step automatically.

Upgrading solution

Prerequisite: The solution is currently deployed.

stsadm -o upgradesolution -name SampleSolution.wsp -filename SampleSolution.wsp -immediate -allowgacdeployment
stsadm -o execadmsvcjobs
update-spsolution -identity SampleSolution.wsp -literalpath c:\solutions\SampleSolution.wsp -gacdeployment

Again, note that the cmdlet’s -literalpath switch requires a full path to the WSP file.

Retracting solution

Prerequisite: The solution is currently deployed.

stsadm -o retractsolution -name SampleSolution.wsp -immediate
stsadm -o execadmsvcjobs
uninstall-spsolution -identity SampleSolution.wsp -webapplication http://server -confirm:$false

As mentioned in the section Deploying solution, the solution requires modification to Web.config. With PowerShell, you must specify with the -webapplication switch the Web application from which the solution is to be retracted. Failure to do so will result in the following error:

Uninstall-SPSolution : This solution contains resources scoped for a Web application and must be retracted from one or more Web applications.

The cmdlet asks you to confirm the operation before proceeding. For a completely automated operation, you can turn off the confirmation with the -confirm switch.

Removing solution from solution store

Prerequisite: The solution has been retracted.

stsadm -o deletesolution -name SampleSolution.wsp -override
remove-spsolution -identity SampleSolution.wsp -confirm:$false

Related posts:

Leave a Reply

Your email address will not be published. Required fields are marked *