Agenda Who is this Todd guy? www.toddklindt.com/blog www.sharepoint911.com todd@sharepoint911.com Windows PowerShell Basics • Combine the two to build specific commands • Examples • Get-SPSite • Get = Verb • SPSite = Noun Getting the list of SharePoint cmdlets • Get-Command –noun sp* • Get-Help <cmdlet> Getting the list of SharePoint cmdlets • Get-Help <cmdlet> -full • Get-Help <cmdlet> -detailed DEMO Scripting Syntax • $password = Read-Host "What is the password for all accounts?" assecurestring ; Get-Content usernames.txt | ForEach-Object {NewSPManagedAccount -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 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 Visual Upgrade 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 = 'OnDemand'; $dash.TraceEnabled = $true; $dash.Update() Visual Upgrade • Can be used to rapidly check or change status $db = Get-SPContentDatabase WSS_Content_SharePoint_2007 $db.Sites | Get-SPWeb -limit all | ForEach-Object {$_.UIversion = 4; $_.UIVersionConfigurationEnabled = $false; $_.update()} • Or $db = Get-SPContentDatabase WSS_Content_SharePoint_2007 $db.Sites | foreach-object {$_.VisualUpgradeWebs} 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 Get-SPLogEvent -StartTime (Get-Date).addminutes(-10) –Directory e:\logs | Where-Object {$_.correlation -eq "dc07834b-9982-4eafaacf-d62a6b398f87"} Master Pages • Can be used to set the master page $web = Get-SPWeb http://sharepoint $web.CustomMasterUrl = "/_catalogs/masterpage/nightandday.master" $web.MasterUrl = "/_catalogs/masterpage/nightandday.master" $web.Update() Database Information • Use Get-SPDatabase to get list of databases and their properties Get-SPDatabase | Sort-Object disksizerequired -desc | FormatTable 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))} A short list of people that are smarter than me • Zach Rosenfield’s blog • http://sharepoint.microsoft.com/Blogs/zach • SPModule • http://www.microsoft.com/downloads/en/details.aspx?displaylang=en &FamilyID=c57556ff-8df0-44fd-aba6-3df01b9f80ce • 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 I referenced • Determine database sizes in PowerShell • http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=193 • Using PowerShell to control Visual Upgrade • http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=173 • Remoting requirements for SharePoint 2010 • http://sharepoint.microsoft.com/blogs/zach/Lists/Posts/Post.aspx?ID=45 • Developer Dashboard • http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=189 • Master Pages • http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=226 • Good farm configuration script from another Todd • http://todd-carter.com/post/2010/04/26/The-Wizard-Likes-His-GUIDs.aspx • Use Move-SPSite • http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=233