Title: PowerShell For SharePoint Developers
1PowerShell For SharePoint Developers
- Neil Iversen
- Inetium
- http//justaddcode.com
2The Plan
- PowerShell
- Introduction
- Basic Syntax
- Not-So-Basic Syntax
- SharePoint
- Using the SharePoint Object Model
- Debugging Code using PowerShell
- Showing Off
- SharePoint Specific? (Providers,)
- Questions
3Why PowerShell for Developers?
- Better visibility into the Object Model
- Find all the instances of a content type in a
Site - Automated or repetitive tasks
- Add a web part to a page on 500 sites
- Faster Development Cycle
4Developing Faster
- Traditional SharePoint Development
- Time wasted during Testing
- PowerShell / .NET Hybrid Development
- Risky development done in PoSH
- Code converted to .NET (C/VB)
- Shorter Deploy/Test Cycle
5What is PowerShell?
- Different things to different people
- Its a
- Shell
- Cool .bat file
- VBScript replacement
- Admins Best Friend
- Developers Best Friend
6cmd.exe
7 8unix cmdline
9 10.net
11 12An ugly by powerfull shell
13Getting Around
14Core Components
- Alias
- cd set-location
- Dir get-childitem
- Cmdlet
- Workhorse of PowerShell
- Function
- Block of script
- Provider
- Adds alternate directory structure
- Think /proc only niftier
- Get-PSdrive
- Snapin
- Group of PowerShell functionality
15DEMO Getting Around
16Conditions and Flow Control
- Variables
- foo bar implicitly typed as
System.String - ary 4,2,5,2 typed as object
- xmlxdoc ltagtltbgtb1lt/bgtltbgtb2lt/bgtlt/agt
- Some Operators
- -eq
- -lt / -gt
- -le / -ge
- -like / -notlike
- -match / -imatch
- Control
- If
- switch
- help about_comparison_operators
17The Pipeline
- Everything is a System.Object
- Unless its something more useful
- dir where-object _.Length gt 5
select-object last 2 sort-object -prop
Extension desc - anArray sort
18Most Useful Commands
- Foreach-object
- dir foreach-object _.Name
- Alias dir _.Name
- Where-object
- dir where-object _.Length gt 10
- Alias dir ? _.Length gt 10
- Select-object
- dir select-object first 5
- Alias none
- Honorable Mentions Sort-Object, Group-Object
19DEMO Exploring the Pipeline
20LINQish PowerShell Syntax
LINQ
PowerShell
int numbers 5, 4, 1, 3, 9, 8, 6, 7, 2, 0
var lowNums from n in numbers
where n lt 5 select n
Console.WriteLine("Numbers lt 5") foreach
(var x in lowNums) Console.WriteLine(x)
numbers 5, 4, 1, 3, 9, 8, 6, 7, 2,
0 Write-host Numbers lt 5 numbers ?_ -lt 5
21Isnt this for SharePoint Developers?
- SharePoint has a rich .NET Object Model
- PowerShell interacts natively with .NET
- SharePoints internal values are hidden
- Lots of functionality not accessible via the UI
- Validation of custom code
- Debugging is Difficult
- Especially on a remote machine
- Code/Compile/Deploy/Test/Repeat Cycle
22Loading the Object Model
- System.Reflection.AssemblyLoadWithPartialName(
Microsoft.SharePoint) - site new-object Microsoft.SharePoint.SPSite(htt
p//thesite/site) - web site.OpenWeb()
- web.Title
23Some Useful Commands
- Display all the Lists
- web.Lists
- Display Properties Sorted by Name
- item.Properties sort prop Name
- Set an items properties
- item.PropertiesSomeKey value
- item.Properties.Update()
24DEMO Working with Item Properties
25Exploring SharePoint Development
- Not Everything is Intuitive
- Object Model Gives Hints
- Compile-gtDeploy-gtTest Loop is Long
- Makes failed attempts expensive
- Using PowerShell Lowers (some) Pain
- No Compile/Deploy Loop
- Get Immediate Feedback
26DEMO SPListItems and Folders
27Extending Types
- Command Line version of Mashups
- Add Properties and Methods to ANY type
- Simplifies potentially tedious commands
- On The Fly Magic
- Add-Member
- The (SemiPermanent) Magic
- Ps1xml
- Update-type pre/postpend my.ps1xml
28DEMO Extending Types
29Taking it Further
- PowerShell Community Extensions (PSX)
- http//www.codeplex.com/PowerShellCX
- SharePoint Provider (v2 only)
- http//www.codeplex.com/PSSharePoint
- PowerTab
- http//thepowershellguy.com/blogs/posh/pages/power
tab.aspx
30Your Feedback is Important
- Please fill out a session evaluation form and
either put them in the basket near the exit or
drop them off at the conference registration
desk. - Thank you!
31Questions?
32Thanks!
- Neil Iversen
- Inetium
- http//justaddcode.com