SharePoint and PowerShell - practical tips

Published 14 November 08 12:04 PM

Creating scripts to set off a load of stsadm commands have been a common task in SharePoint for a long time. In development and testing environments the need to install, create farm, web applications, site collection and sub sites, in a repeatable manner is must have, not a nice have. The scripts are used for setting up fresh syspreped vpc's, reinstalling (after someone (yourself?) have messed up, creating test and prototype sites. Finally a production version of the script is likely to run.

There are a lot of settings in SharePoint. And you need to change many of them from environment to environment. This implies you create and keep a settings file for each environment. By this time your little script project is perhaps not so small anymore - and is it still neat and tidy all the way? If you are using batch files (.bat) or command (.cmd) files it is probably not.

But if you have done all this, you might also had a look at Gary Lapointe's STSADM extensions. They provide you with even more things you can script and automate. Great! Expect for the fact that your scripts are getting more numerous and longer...

More and more of us are starting to use PowerShell to accomplish scripting tasks in SharePoint.

What is PowerShell?

If you have not heard of PowerShell, it is plainly said the new scripting language and tool from Microsoft. It is actually included as a part of Windows 2008. It comes with a lot of functions ready for you to use.

What can PowerShell do for your SharePoint scripting?

First of all - you should probably not just translate all your scripts to PowerShell. I do not think that will improve your situation much. My advice is that you extract and simplify wherever you can. Because you now have the means to do it. I cannot give a full listing of all the possibilities (and I still consider myself new to this scripting language), but here are some highlights:

Arguments:
foreach ($i in $args) {$i}

Comparison:

-lt

Less than

-le

Less than or equal to

-gt

Greater than

-ge

Greater than or equal to

-eq

Equal to

-ne

Not equal to

-like

Like (uses wildcards for matching)

-notlike

Not like (uses wildcards for matching)

Variable:
$a = "white"

Conditional:

if ($a -eq "red")
{"The color is red."}
elseif ($a -eq "white")
{"The color is white."}
else
{"The color is blue."}

Help:
Get-Command
Get-Alias
Get-Help cmdlet -full


Include another PowerShell file in your file:
. .\filename.ps1

You can also bind to active directory, create .Net objects, get WMI, write and read from files, color output and much more. There are a lot of examples out on the net, so you probably can get a lot for free by taking a look at scripts repositories like Script Center at TechNet. There you will also find a link to the PowerShell V2 CTP 2, which includes the graphical editor:

image

The editor has three panes: Top one for editing the script, middle for output and bottom one for command line input. (Remember to navigate the command line input to the folder where your scripts are located).

Creating the SharePoint scripts

There are several ways to implement the scripts. I have tried a couple of approaches, but think the one I outline here gives the most flexibility and reuse. However, this might differ from project to project, so you will need to decide if this approach is fit for your need. Here is what I have:

Three common scripts:

    1. Build farm.ps1
    2. Upgrade farm.ps1
    3. Destroy farm.ps1

One run/settings file per environment, i.e.:

    1. Dev_vpc.ps1
    2. Dev_alias_vpc.ps1
    3. Test_Daily.ps1
    4. etc.

The common scripts only contain functions for creating, upgrading and destroying. These functions does not contain a single environment specific parameter! Each function starts with an if-statement, linking to an variable in the run/settings files. This make us able to make settings separate for each file.

To run the files, type the name of your run/settings file with a parameter stating which of the common scripts you would like to run. So the settings file first load all the settings and parameters, then it has a small function at the end, which selects the appropriate common file to run, based on your parameter.

Here are some (scaled down) example bits:

#Variables:
$CreateFarm = $true
$ProvisionCentralAdmin = $true
$InstallServices = $true

#Create Alias'
new-alias "stsadm" ($env:CommonProgramFiles + "\Microsoft Shared\web server extensions\12\BIN\stsadm.exe")
new-alias "psconfig" ($env:CommonProgramFiles + "\Microsoft Shared\web server extensions\12\BIN\psconfig.exe")

#Create farm
if ($CreateFarm)
{
  & psconfig -cmd configdb -create -server ""$DBServer"" -database ""$env_ConfigDB"" -user ""$env_FarmAdmin"" -password ""$env_FarmAdmin_pwd"" -admincontentdatabase ""$env_AdminContentDB""
  if ( $LastExitCode -ne 0)
  {
    #An error occured
    (Read-Host "Manually fix this error and hit <ENTER> to continue")
  }
}

#Install global wsp solutions
if ($InstallGlobalSolutions)
{
  foreach( $solution in $GlobalSolutionArray)
  {
    & stsadm -o addsolution -filename wsp\$solution
    & stsadm -o deploysolution -name $solution -immediate -force -allowGacDeployment -allowCasPolicies
  }
  & stsadm -o execadmsvcjobs
}


#Create site
if ($CreateTestSite)
{
  & stsadm -o createsite -url $env_Test_URL -ownerlogin $userAndDomainName -owneremail $email -sitetemplate "CMSPUBLISHING#0" -title "TestPortal" -description "Test Portal root"
}

And so it goes on... :) Reusing the files from farm to farm really saves time.

I'm curious to see what comes in line of Visual Studio integration! There are still some pieces missing from PowerShell, but the improvements are good from version to version.

Last you should definitively check out the PowerShellPackforSharePoint. These script provides a lot of functionality you will probably use in your projects.

Thanks to Karl Martin for helping me get started with PowerShell. :)

References

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# SharePoint and PowerShell - practical tips | Tmao Coders said on November 14, 2008 6:24 AM:

PingBack from http://www.tmao.info/sharepoint-and-powershell-practical-tips/

# Shared Points for SharePoint... said on November 28, 2008 4:30 AM:

It is an pleasure to announce the first of our two new SharePoint projects on Codeplex.com: Project Description

# Shared Points for SharePoint... said on November 28, 2008 4:31 AM:

It is an pleasure to announce the first of our two new SharePoint projects on Codeplex.com: Project Description

# Michael Greth MVP SharePoint Blog said on November 28, 2008 7:14 AM:

Es ist schon erstaunlich, wie viele SharePoint Projekte auf CodePlex vorhanden sind und fast täglich

# Mirrored Blogs said on November 28, 2008 8:16 AM:

Es ist schon erstaunlich, wie viele SharePoint Projekte auf CodePlex vorhanden sind und fast täglich

# Mutaz Abu-Ghazaleh said on December 9, 2008 10:01 PM:

cross posting from the Norwegian MCS IW team : &#160; It is an pleasure to announce the first of our

# Michael Greth MVP SharePoint Blog said on December 10, 2008 7:45 AM:

Direkter Download: SPPD-107-2008-12-10 Veranstaltungen TechNet Webcast Search Server 2008 und MOSS 2007

# SharePointPodcast.de said on December 12, 2008 6:13 AM:

Direkter Download: SPPD-107-2008-12-12 Veranstaltungen TechNet Webcast Search Server 2008 und MOSS 2007

# Michael Greth MVP SharePoint Blog said on December 12, 2008 6:16 AM:

Direkter Download: SPPD-107-2008-12-12 Veranstaltungen TechNet Webcast Search Server 2008 und MOSS 2007

# Mirrored Blogs said on December 12, 2008 6:23 AM:

Direkter Download: SPPD-107-2008-12-12 Veranstaltungen TechNet Webcast Search Server 2008 und MOSS 2007

# SharePoint Thinks, Links and Clinks said on March 5, 2009 10:54 AM:

More powerful than a one line cmd, faster than a bat file with many comments. A few great practical examples

# It's my life... And I live it... said on March 17, 2009 6:40 PM:

Some additional tips for using PowerShell with MOSS and WSS . A pretty interesting set of functions and

Leave a Comment

(required) 
(optional)
(required) 

  
Enter Code Here: Required

About Stian Kirkeberg

Stian Kirkeberg - Senior Consultant, Microsoft Consulting Services

This Blog

Syndication

Page view tracker