PowerShell for SharePoint Developers and Administrators

advertisement
PowerShell
for SharePoint Developers and
Administrators
Michael Blumenthal
Magenic Technologies
MichaelBl@Magenic.com
Who is Michael Blumenthal?
Sr. Consultant @
Magenic (MSFT Gold Partner)
16 years in IT Consulting
8 years working with SharePoint
2
MCITP: SharePoint 2010; MCTS: WSS Dev
MCTS: MOSS Config & MCTS: WSS Config
MCAD, MCSE, MCDBA, CAPM
Why PowerShell?
No
Compiling!
No
Packaging!
Just Code &
Go!
3
PowerShell puts the SharePoint
Engine at your fingertips!
1
• It’s Easy to Get Started!
2
• Learn the PowerShell Syntax
3
• Real World Examples
4
• More Resources
• Demo!
4
Chapter 1
5
Getting Started with PowerShell
Windows Server 2003
• Download
Windows Server 2008
• Install
Windows Server 2008 R2
• Run (V2!)
7
Shell User Experience
Extensible Tab
Completion
Navigable History
>>
8
Line Continuation
9
Chapter 2
10
Learn to use PowerShell with SharePoint!
Symbols &
Keywords
Using the
SharePoint API
Creating and
Running Scripts
Symbols, Keywords, and Syntax! Oh
My!
12
1
• Variables
2
• Commands
3
• Piping
4
• Comparisons
5
• Flow Control
6
• Filtering
Punctuation Pronunciation
Symbol
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”?
13
1
Variables begin with a $
$foo
• Case Insensitive, Dynamic typing
$true, $false, $profile
$foo = “Hello, World”
14
15
2
Commands are called cmdlets.
Verb-Noun
Built-in, Extensible
Get-Help & Help
Get-Member
16
17
3
The Power of Piping!
Output Of
Command 1
18
Input of
Command 2
Example
4
Making Comparisons
Operator
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)
5
For
ForEach
If
While
21
Taking Control of the Flow
• For (Init;Test;Repeat) {Commands}
• for($i=1; $i -le 10; $i++) {Write-Host $i}
• Foreach (Item in Collection) {Commands}
• Foreach ($web in $site.AllWebs) {$web.Title}
• If (Test) {Commands}
• if ($web.Title –ne “”) {Write-Host $web.Title}
• While (Condition){Commands}
• while($val -ne 3){$val++; Write-Host $val}
Example
6
Where-Object
Syntax •Where {<Test>}
•Dir | Where {$_.Name –like
Example
“B*”}
23
Using the SharePoint API
24
1
• Getting an SPSite
2
• Manipulating It
3
• Cleaning Up
Highlights from the SharePoint
Object Model
SPFarm
SPWebApplication
SPWeb
SPList
SPListItem
SPField
25
Loading SharePoint DLLs
[void][System.Reflection.Assembly]::
LoadWithPartialName("Microsoft.SharePoint")
26
Get a Site and Explore it!
$site = New-Object
Microsoft.SharePoint.SPSite(“http:/
/server/path”)
OR
$site = GetSPSite(“http://server/path”)
THEN
$site
27
28
Create a List Item
29
Practical Uses
30
1
• Create Sites from the Command Line
2
• Add Lists and List Items to a Web
3
• Create data for test cases
4
• Associate Workflows with a List
5
• Work across site collections
6
• Update User Metadata in AD for better Profile Pages
7
• Identify files that won’t upload
A Word About Memory Management
31
SPWeb
SPSite
Inline
In Script
32
Creating .PS1 Script Files
33
Executing Scripts
.\filename.ps1
Set-ExecutionPolicy
Unrestricted
34
Chapter 3
35
Real World Examples
Check the Version
Check Versioning on all document Libraries
Clear a list
Look at multiple Event Throttling levels at once
for the ULS (diagnostic) log
36
What’s your MOSS Version?
$farm =
[Microsoft.SharePoint.Administratio
n.SPFarm]::Local
$farm.BuildVersion
Major
----12
37
Minor
----0
Build
----0
Revision
-------6318
Check Doc Lib Versioning Settings
function 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
38
39
Clear a List
Make a mess:
Clean it up!
40
41
Look at the ULS configuration
Why?
See multiple event categories at once!
How?
$ulsid = $farm.Services | select-object
TypeName, Id | where {$_.TypeName -eq "Windows
SharePoint Diagnostics Service"} | SelectObject Id
$ulsvc = $farm.GetObject($ulsid.Id.ToString())
$ulsvc.GetItems() | Select-Object Name,
EventSeverity, TraceSeverity, hidden | where
{$_.hidden -eq 0}
42
43
Chapter 4
44
Resources
SharePoint +
Reflector / Decompiler
Microsoft Resources
3rd Party Resources
Use a Decompiler to see MSFT’s
Code!
OR
ILSpy.net
dotPeek (jetbrains)
justDecompile (Telerik)
Others…
46
47
48
49
50
51
52
Resources Summary
MSFT
Reverse Engineering SharePoint Pages
Bruce Payette’s Book
PowerShell Product Team Blog
Community
CodePlex: PSBBs
My Blog at BlumenthalIT.Net
Jeff Hicks - http://www.jdhitsolutions.com/
Neil Iverson http://www.justaddcode.com/blog/
53
In Review…
It’s Easy to Get
Started!
Learn & Use the
PowerShell Syntax
More Resources
PowerShell puts the SharePoint API
at your fingertips!
54
Chapter 5
See the power of PowerShell + SharePoint!
55
Let’s Eat!
56
Bulk Creating Sites and Site Collections
57
The Challenge
New
SharePoint
website
58
A lot of
structure
Little time
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 subsites
1 per congressional district
Need: Streamline the Creation of 440 nearly
identical subsites
59
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
60
• Subgroups
• Doc Libs and Lists
Let’s Compare Solutions
PowerShell & Excel & UI
Site Definitions in V. Studio
Not an answer by themselves
Define site content
Intended for reuse
Mismatch to one time need
CAML and PITA
Harder: Making it data driven
Change Site Def -> Recreate Site
61
Well suited for one time “blow
in’s”
Define the site template in the
UI or use standard
Save as a template
Even pub sites
PowerShell has easy loops
Data driven from a CSV
Changes -> Mod Scripts
The PowerShell Solution
Read the list of sites from CSV
Loop:
Create Site
Configure Site
Turn on Features
Set Master Pages, Welcome Page
Hide Libraries, set versioning
Adjust Navigation
Add Lists, Libraries, Pages, Web parts, etc
Loop again & again if needed – iterative!
62
Even DVWP’s become an option
Data View Web Parts of lists & libraries
Edit only in SPD
Pub Pages can’t be edited in SPD, only layouts
But wait!
Traditional limit: tied to a list by GUIDs
Power of POSH: You can edit the DVWP
definitions via the OM!
No longer “Not Deployable”!
63
So How Do I
64
Key Language Constructs
$variable and piping (|)
Import-CSV
Foreach
Function global:MyCustomFunction($foo){
write-host $foo
}
SharePoint Object Model access
65
Start with a
Spreadsheet
66
Save as a CSV
Comma
Separated
Values
“Double Quotes”
Can update CSV
directly
67
68
69
70
Calling SharePoint From POSH
2007
2010
Need to define a set of helper
functions
I use Zach’s
Get these at PSBB.CodePlex.com
500+ POSH cmdlets ship with
SP2010
Register One Snapin
$site = Get-SPSite $SCUrl
$newweb = $site.AllWebs.Add($Url, $Title,
$Description,
1033,"CMSPUBLISHING#0",$InheritParentpermissions,
$DoNotConvert)
71
SP2010 PowerShell SnapIn
Over 500 functions defined
Automatically loaded in the SP Admin Console
Can do the same in ISE and PS Profile
72
Outer Loop & Test Cases
73
Creating a site via POSH
74
DVWP? What’s that?
Only in SPD…
75
76
77
78
79
District DVWP – Runtime Update
Type 1
80
Adding the other DVWP
81
78 created sites in just 7 minutes!
82
The Challenge
You need to stand up a new SharePoint website
It needs a lot of structure
You don’t have a lot of time
No patience for manual GUI site creation
The New Answer
PowerShell!
83
Resources
Blog about SharePoint at http://BlumenthalIT.net
PSBB.CodePlex.com
Twitter: @MichaelBL
LinkedIn: http://www.linkedin.com/pub/michael-blumenthal/0/19a/354
MichaelBL@magenic.com
84
Contact Me!
Blog about SharePoint at
http://BlumenthalIT.net
Twitter: @MichaelBL
MichaelBL@magenic.com &
http://www.Magenic.com
85
Custom Solutions Guaranteed to fit.
Gold in Portals and Collaboration
SDPS Program Member
86
Download