Upload
others
View
41
Download
0
Embed Size (px)
Citation preview
Introduction to Windows PowerShell
for SharePoint Administrators
Shane Young and Todd Klindt
SharePoint Nerds
Rackspace
Who is this Todd guy?
• SharePoint MVP since 2006
• Speaker, writer, consultant, juggler of kittens
• Personal Blogwww.toddklindt.com/blog
• Company web sitesharepoint.rackspace.com
• Twitter me! @toddklindt
Agenda
• What is Windows PowerShell
• Windows PowerShell basics
• Windows PowerShell scripts for administrators
What is Windows PowerShell?• Command-line interface and scripting language used
for SharePoint Server administration
– Compliments CMD
– Extends STSADM
– Uses XML & Objects
– Built on the .NET Framework
Why do we care?
• Complete command-line system that is far more
powerful than any previous Windows-based
command-line prompt environment.
• Provides:
– More Control
– More Efficiency
– More Productivity
– More coolness
What about STSADM?
• STSADM still available to support backwards
compatibility.
• Whatever STSADM can do, PowerShell can do
better!
– Ability to run against SQL Snapshots, instead of
production.
– More granular control for backup / restore.
Windows PowerShell Basics
• cmdlet
– pronounced "command-let“
– single function that can be used separately or
combined with other cmdlets to perform complex
tasks and automate administration
Windows PowerShell Basics
• cmdlets = verbs (actions) & nouns (objects)
– Combine the two to build specific commands
– Examples
• Get-SPSite
• Get = Verb
• SPSite = Noun
Getting the list of SharePoint cmdlets• Get a list of all commands:
– Get-Command –noun sp*
• Get help for a specific command:
– Get-Help <cmdlet>
– Get-Help <cmdlet> -example
PowerShell Scripts
• Build scripts to easily execute through common
commands & tasks!
• Can be developed and scheduled using Windows
Task Scheduler.
• Register-ScheduledJob
PowerShell Scripts
• Examples:
– Activate a feature across multiple site collections
– Provisioning of Managed Accounts
– Creating of New Sites
– Backup all Site Collections in Farm
Scripting Syntax
• Sample Script:– $password = Read-Host "What is the password for all
accounts?" -assecurestring ; Get-Content usernames.txt |
ForEach-Object {New-SPManagedAccount -password
$password -username litwareinc\$_; Set-SPManagedAccount -
identity $_ -autogenerate -confirm:$False}
Syntax Description
$ Denotes a variable.
; Denotes completion of cmdlet, continue to next one.
| Sends the output of the preceding cmdlet to the next cmdlet.
ForEach-Object { } For each object, execute all the commands within the { }.
General PowerShell tips
• It’s just a shell, spruce it up some
– Color
– Size
– Run as Admin
• Enable quick edit
• Use the included ISE
• Use a third party solution
Remoting
• Must be enabled on each server
• Nothing much to do on the client
• Two ways in
– Enter-PSSession
– Invoke-Command
• Use Enable-PSRemoting to enable
• Get-Help about_remoting
• Watch out for security settings
• Increase MaxMemoryPerShellMB
• PowerShell Web Access
Avoiding the Farm Config Wizard
• The Farm Config Wizard does some very bad things
• Wise SharePoint admins avoid it
• Use PowerShell to replicate its functionality
• Steps
– Managed accounts
– Web applications
– MySite host
– Service application pool
– State Service
– Usage Service
– The rest
Everyday tasks
• Add-SPShellAdmin
• Move-SPSite
• Enable Developer Dashboard
• Troubleshooting
• Master pages
• Get database sizes
Add-SPShellAdmin
• Necessary for unprivileged accounts, since you’re not logging in as the Farm account, right?
• Must specify databases to give access to
• Gives permissions to an account
– WSS_Admin_WPG on SharePoint servers
– SharePoint_Shell_Access role on database
• To run it account must have:
– Security_Admin role SQL instance
– db_owner role on database
– Local admin on SharePoint server
Move-SPSite
• Used to move Site Collections between content
databases
• Everything ‘mergecontentdbs’ can do, this can do
better
• Mostly done on the SQL side
• Databases must be attached to the same web
application, and on the same SQL instance
• Works great to get rid of Content databases with
GUIDs
Developer Dashboard
• Can be enabled with STSADM, but that’s just embarrassing
• More flexibility with PowerShell
$dash =
[Microsoft.SharePoint.Administration.SPWebService]::Conte
ntService.DeveloperDashboardSettings;
$dash.DisplayLevel = 'On';
$dash.TraceEnabled = $true;
$dash.Update()
Get-SPLogEvent -StartTime (Get-Date).addminutes(-10) –Directory
e:\logs | Where-Object {$_.correlation -eq "dc07834b-9982-4eaf-
aacf-d62a6b398f87"}
Troubleshooting
• Use New-SPLogFile immediately before
and right after recreating a problem
• Use Merge-SPLogFiles to collect trace logs
from all servers in your farm
• Use Get-SPLogEvent to get events
– Can filter by a number of properties, like
Correlation ID
– Can point at alternate directory
$web = Get-SPWeb http://sharepoint
$web.CustomMasterUrl =
"/_catalogs/masterpage/nightandday.master"
$web.MasterUrl = "/_catalogs/masterpage/nightandday.master"
$web.Update()
Master Pages
• Can be used to set the master page
Get-SPDatabase | Sort-Object disksizerequired -desc | Format-
Table Name, @{Label ="Size in MB"; Expression =
{$_.disksizerequired/1mb}}
Get-SPDatabase | ForEach-Object {$db=0} {$db
+=$_.disksizerequired; $_.name + " - " +
$_.disksizerequired/1mb} {Write-Host "`nTotal Storage (in MB)
=" ("{0:n0}" -f ($db/1mb))}
Database Information
• Use Get-SPDatabase to get list of databases and
their properties
Links
• Todd doing this without Shane• http://www.toddklindt.com/sizzle
• Zach Rosenfield’s blog• http://sharepoint.microsoft.com/Blogs/zach
• Gary Lapointe’s blog• http://blog.falchionconsulting.com/
• Document your farm with PowerShell• http://technet.microsoft.com/en-us/library/ff645391.aspx
• PS Scripts• http://get-spscripts.com/
Things we referenced
• Determine database sizes in PowerShell• http://www.toddklindt.com/SP2010DatabaseSize
• Remoting requirements for SharePoint 2010• http://sharepoint.microsoft.com/blogs/zach/Lists/Posts/Post.aspx?ID=45
• Developer Dashboard• http://www.toddklindt.com/devdashboard
• Master Pages• http://www.toddklindt.com/SetSP2010MasterPage
• Use Move-SPSite• http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=233
• SharePoint 2013 PowerShell Guide• http://technet.microsoft.com/en-us/library/ff678226.aspx