Gavin Barron, Solution Architect
March 22, 2014
ComCamp Auckland
PowerShell:
Automation for
Everyone
The only five commands you need
Rules for writing scripts
Demos
Intro
Wrap up
Our agenda
PowerShell: Automation for Everyone | 3
 SharePoint Server MVP
 Developer
 Skier
 http://gavinb.net
 @gavinbarron
 gavin.barron@intergen.co.nz
Gavin Barron
Solution Architect
Your presenter
PowerShell: Automation for Everyone | 4
Why Automate?
 Repeatability
 Reliability
 Save time?
 Eliminate boring manual tasks
PowerShell: Automation for Everyone | 5
Why PowerShell?
 Product specific cmdlets
 Able to run .NET code
 Hooks into WMI/COM
 Object pipeline
 Readable scripts
The only five
commands you need
Your Awesome Presentation Title {Segoe UI 12 pt.}
Get-Command
Your Awesome Presentation Title {Segoe UI 12 pt.}
Get-Help
Your Awesome Presentation Title {Segoe UI 12 pt.}
Get-Member
Your Awesome Presentation Title {Segoe UI 12 pt.}
Where-Object
Your Awesome Presentation Title {Segoe UI 12 pt.}
ForEach-Object
Demos
Your Awesome Presentation Title {Segoe UI 12 pt.}
Find the command
you need
Your Awesome Presentation Title {Segoe UI 12 pt.}
Simple Pipeline Use
PowerShell: Automation for Everyone | 15
File renaming in .bat
@echo off
for /f "delims=" %%a in ('dir /b *.txt') do call :dot "%%a"
pause
goto :EOF
:dot
set "var=%~n1"
set "var=%var:.=_%"
echo ren %1 "%var%%~x1"
Rules for writing
scripts
PowerShell: Automation for Everyone | 17
Consider error cases
 What should you do when it goes pear shaped?
 Default behaviour is Ignore and Continue
 $ErrorActionPreference
 -ErrorAction
 try{} catch{}
PowerShell: Automation for Everyone | 18
Consider your outputs
 Write-Host
 Write-Output
 Write-Progress
 Add-Content
 Out-File
PowerShell: Automation for Everyone | 19
Have style!
 Use a coding convention
 Naming
 Casing
 Bracing
 Avoid aliases
 Be Consistent!
PowerShell: Automation for Everyone | 20
Leverage functions for re-use
 Small tasks
 Compose a script from functions
 Functions are highly reusable
 Cmdlet Binding Attribute
 Parameters Attribute
 Default Values
PowerShell: Automation for Everyone | 21
Use configuration files
$file =[xml] (Get-ChildItem $constantsFilePath)
$root = "setup-config"
$ConstantsNodeList = $file.$root.Constants
foreach($property in $ConstantsNodeList.Property) {
$key= $property.Key
$value=$property.Value
$webApp.Properties.Add($key,$value)
}
$webApp.Update()
Your Awesome Presentation Title {Segoe UI 12 pt.}
Script Examples
Wrap up
Your Awesome Presentation Title {Segoe UI 12 pt.}
Start scripting, it’s easy!
PowerShell: Automation for Everyone | 25
Handy resources
 http://blogs.technet.com/b/heyscriptingguy
 http://gallery.technet.microsoft.com/scriptcenter
 http://social.technet.microsoft.com/Forums/scriptcenter/en-
US/home?forum=ITCG
 http://ss64.com/ps/
 http://ss64.com/ps/syntax.html
Any questions?
Email: gavin.barron@intergen.co.nz
Blog: http://gavinb.net
Twitter: @gavinbarron
Thank you
PowerShell: Automation for Everyone