PowerShell for SharePoint Developers and
Administrators
Michael BlumenthalMagenic Technologies
2
Who is Michael Blumenthal?
Sr. Consultant @ Magenic (MSFT Gold Partner)
16 years in IT Consulting
8 years working with SharePoint
MCITP: SharePoint 2010; MCTS: WSS DevMCTS: MOSS Config & MCTS: WSS ConfigMCAD, MCSE, MCDBA, CAPM
3
No Compiling!
No Packaging!
Just Code & Go!
Why PowerShell?
4
PowerShell puts the SharePoint Engine at your fingertips!
• It’s Easy to Get Started!1• Learn the PowerShell Syntax2• Real World Examples3• More Resources4• Demo!
5
Chapter 1
IT’S EASY TO GET STARTED!
Getting Started with PowerShell
Windows Server 2003• Download
Windows Server 2008• Install
Windows Server 2008 R2• Run (V2!)
7
8
Shell User Experience
Extensible Tab Completion
Navigable History
Line Continuation>>
9
10
Chapter 2
LEARN THE POWERSHELL SYNTAX!
Learn to use PowerShell with SharePoint!
Symbols & Keywords
Using the SharePoint API
Creating and Running Scripts
12
Symbols, Keywords, and Syntax! Oh My!
• Variables1• Commands2• Piping3• Comparisons4• Flow Control5• Filtering6
13
Punctuation PronunciationSymbol Called Symbol Called
$ Dollar sign, money _ Underscore
# Pound, hash [ ] Square Brackets
| Pipe, vertical bar . Dot, point, period
{ } Curly braces < > Angle Brackets
“ Double Quote, tick - Dash, hyphen, minus
: Colon % Percent sign
( ) Parentheses ; Semi-colon
+ Plus = Equals, is
! Bang, not /, \ Slash, backslash
Is “$#|” a “one dollar hash pipe”?
14
Variables begin with a $
• Case Insensitive, Dynamic typing
$foo
$true, $false, $profile
$foo = “Hello, World”
1
15
16
Commands are called cmdlets.Verb-Noun
Built-in, Extensible
Get-Help & Help
Get-Member
2
17
18
The Power of Piping!
Output Of Command
1
Input of Command
2|
3
Example
Making Comparisons4Operator Meaning Operator Meaning
-eq Equals -le Less Than or Equal To
-ne Not Equals -like Wildcard Match
-gt Greater Than -notlike Not (Wildcard Match)
-ge Greater Than or Equal To -match Reg. Exp. Match
-lt Less Than -notmatch Not (Reg. Exp. Match)
21
Taking Control of the Flow5
• For (Init;Test;Repeat) {Commands}• for($i=1; $i -le 10; $i++) {Write-Host $i}For• Foreach (Item in Collection) {Commands}• Foreach ($web in $site.AllWebs) {$web.Title}ForEach• If (Test) {Commands} • if ($web.Title –ne “”) {Write-Host $web.Title}
If• While (Condition){Commands}• while($val -ne 3){$val++; Write-Host $val}While
Example
23
Where-Object6
• Where {<Test>}Syntax
• Dir | Where {$_.Name –like “B*”}
Example
24
Using the SharePoint API
• Getting an SPSite1• Manipulating It2• Cleaning Up3
25
Highlights from the SharePoint Object Model
SPField
SPListItem
SPList
SPWeb
SPWebApplication
SPFarm
SPSite
26
Loading SharePoint DLLs
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
27
Get a Site and Explore it!
$site = New-Object Microsoft.SharePoint.SPSite(“http://server/path”)
OR$site = Get-SPSite(“http://server/path”)
THEN$site
28
29
Create a List Item
30
Practical Uses• Create Sites from the Command Line1• Add Lists and List Items to a Web2• Create data for test cases3• Associate Workflows with a List4• Work across site collections5
• Update User Metadata in AD for better Profile Pages6• Identify files that won’t upload7
31
A Word About Memory Management
SPWeb SPSite
Inline In Script
Dispose
32
33
Creating .PS1 Script Files
34
Executing Scripts
.\filename.ps1
Set-ExecutionPolicy Unrestricted
35
Chapter 3
REAL WORLD EXAMPLES
36
Real World Examples
Check the VersionCheck Versioning on all document LibrariesClear a listLook at multiple Event Throttling levels at once for the ULS (diagnostic) log
37
What’s your MOSS Version?
$farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
$farm.BuildVersion Major Minor Build Revision ----- ----- ----- -------- 12 0 0 6318
38
Check Doc Lib Versioning Settingsfunction global:show-all-doclibs ($web){$web.Lists | where-object {($_.Hidden -ne
$true) -and ($_.BaseType -eq "DocumentLibrary")} }
function global:show-all-doclib-versettings ($web)
{show-all-doclibs ($web) |select-object -property Title, EnableVersioning, MajorVersionLimit, EnableMinorVersions,MajorWithMinorVersionsLimit,forceCheckout}
$site = get-spsite “http://server/path”
show-all-doclib-versettings $site.RootWeb
39
40
Clear a List
Make a mess:
Clean it up!
41
42
Look at the ULS configurationWhy?
See multiple event categories at once!How?$ulsid = $farm.Services | select-object TypeName, Id | where {$_.TypeName -eq "Windows SharePoint Diagnostics Service"} | Select-Object Id$ulsvc = $farm.GetObject($ulsid.Id.ToString())$ulsvc.GetItems() | Select-Object Name, EventSeverity, TraceSeverity, hidden | where {$_.hidden -eq 0}
43
44
Chapter 4
MORE RESOURCES
Resources
SharePoint + Reflector / Decompiler
Microsoft Resources
3rd Party Resources
46
Use a Decompiler to see MSFT’s Code!
OR
ILSpy.netdotPeek (jetbrains)justDecompile (Telerik)Others…
NO
LONGER
FREE
48
49
50
51
JEFF HICKS
52
NEIL IVERSON
53
Resources Summary
MSFTReverse Engineering SharePoint PagesBruce Payette’s BookPowerShell Product Team Blog
CommunityCodePlex: PSBBs My Blog at BlumenthalIT.NetJeff Hicks - http://www.jdhitsolutions.com/ Neil Iverson - http://www.justaddcode.com/blog/
54
PowerShell puts the SharePoint API at your fingertips!
It’s Easy to Get Started!
Learn & Use the PowerShell Syntax
More Resources
In Review…
55
Chapter 5
See the power of PowerShell + SharePoint!
DEMO!
56
Let’s Eat!
BREAK
57
Bulk Creating Sites and Site Collections
PART II
58
The Challenge
New SharePoint
website
A lot of structure Little time
59
Problem Example 1
BI Solution, Contoso PAC“Elect more fake people to fake offices nationwide!”Based on real client though
Solution: Site Collection with 440 subsites1 per congressional district
Need: Streamline the Creation of 440 nearly identical subsites
60
Problem Example 2
Global Civil Engineering, Architecture, Design Co
• New Supplemental Intranet – Communities• Primary Intranet is Employer 2 Employee Pub• This one is for Global Communities of Practice
• Deep hierarchy from day 1• Technical Practice• Technical Practice Groups• Specific Doc Libs & lists
• Technical Discipline• Subgroups• Doc Libs and Lists
61
Let’s Compare Solutions
Site Definitions in V. StudioNot an answer by themselvesDefine site contentIntended for reuse
Mismatch to one time needCAML and PITAHarder: Making it data drivenChange Site Def -> Recreate Site
PowerShell & Excel & UI
Well suited for one time “blow in’s”Define the site template in the UI or use standardSave as a template
Even pub sitesPowerShell has easy loopsData driven from a CSVChanges -> Mod Scripts
62
The PowerShell Solution
Read the list of sites from CSVLoop:
Create SiteConfigure Site
Turn on FeaturesSet Master Pages, Welcome PageHide Libraries, set versioningAdjust Navigation
Add Lists, Libraries, Pages, Web parts, etcLoop again & again if needed – iterative!
63
Even DVWP’s become an option
Data View Web Parts of lists & librariesEdit only in SPDPub Pages can’t be edited in SPD, only layouts
But wait!Traditional limit: tied to a list by GUIDsPower of POSH: You can edit the DVWP definitions via the OM!No longer “Not Deployable”!
64
So How Do I
MAKE IT WORK?
65
Key Language Constructs
$variable and piping (|)Import-CSVForeachFunction global:MyCustomFunction($foo){
write-host $foo}
SharePoint Object Model access
66
Start with a Spreadsheet
67
Save as a CSV
CommaSeparatedValues
“Double Quotes”
Can update CSV directly
68
69
70
71
Calling SharePoint From POSH2007
Need to define a set of helper functions
I use Zach’sGet these at PSBB.CodePlex.com
2010500+ POSH cmdlets ship with SP2010Register One Snapin
$site = Get-SPSite $SCUrl
$newweb = $site.AllWebs.Add($Url, $Title, $Description, 1033,"CMSPUBLISHING#0",$InheritParentpermissions, $DoNotConvert)
72
SP2010 PowerShell SnapIn
Over 500 functions defined
Automatically loaded in the SP Admin Console
Can do the same in ISE and PS Profile
73
Outer Loop & Test Cases
74
Creating a site via POSH
75
DVWP? What’s that?
Only in SPD…
76
77
78
79
80
District DVWP – Runtime Update Type 1
81
Adding the other DVWP
82
78 created sites in just 7 minutes!
DEMO!
83
The Challenge
You need to stand up a new SharePoint websiteIt needs a lot of structureYou don’t have a lot of time No patience for manual GUI site creation
PowerShell!
The New Answer
84
ResourcesBlog about SharePoint at http://BlumenthalIT.net
PSBB.CodePlex.com
Twitter: @MichaelBL
LinkedIn: http://www.linkedin.com/pub/michael-blumenthal/0/19a/354
85
Contact Me!
Blog about SharePoint at http://BlumenthalIT.net
Twitter: @MichaelBL
[email protected] & http://www.Magenic.com
86
Custom Solutions Guaranteed to fit.Gold in Portals and Collaboration
SDPS Program Member