Introduction to Windows PowerShell for SharePoint ... for SharePoint Admins.pdfIntroduction to...

26
Introduction to Windows PowerShell for SharePoint Administrators Shane Young and Todd Klindt SharePoint Nerds Rackspace

Transcript of Introduction to Windows PowerShell for SharePoint ... for SharePoint Admins.pdfIntroduction to...

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

[email protected]

• 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

DEMO

PowerShell Basics

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 { }.

DEMO

PowerShell Scripts

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