Some useful commands in PowerShell
In previous versions of SharePoint, command line configuration was available via the STSADM tool. Although the tool is still available for use with SharePoint 2010, the recommended approach for managing a SharePoint farm via the command line is to use the new SharePoint 2010 Management Shell.
This shell is a PowerShell instance with a collection of SharePoint-specific cmdlets (pronounced command-lets) installed. In this, we’ll take a look at the few of the main cmdlets.
First things first. Where can we find PowerShell?
When running on a SharePoint server, two possibilities exist: either select the SharePoint 2010 Management Shell from the Start menu.
or
open a command prompt and enter the following: "PowerShell".
If we’re using the SharePoint management shell, the SharePoint snap-in will already be installed. If we’re using a standard PowerShell console, we can install the snap-in by entering the following command: "Add-PSSnapIn Microsoft.SharePoint.PowerShell"
We can check the list of installed snap-ins by using this command: "Get-PSSnapIn"
Some Basic Commands
1.Connecting to SharePoint Remotely
One of the real benefits of PowerShell is its ability to connect to remote machines. We can open a PowerShell session on a client machine and then use remoting to connect to a SharePoint server. To enable remoting on the server, entert he following command:
Enable-PSRemoting
This command will enable the WinRM service and set up the firewall to allow incoming sessions.
After the server has been configured, we can connect from any client machine by entering the following command:
Enter-PSSession "Server Name" -Credential
(Get-Credential)
NOTE: If the client machine is running on a domain and your SharePoint server is running as a standalone server, a few other steps are necessary to enable remote connectivity, such as configuring Secure Sockets Layer (SSL) connectivity on the server.
After a remote connection has been established, the SharePoint snap-in can be added with the command:
Add-PSSnapin Microsoft.SharePoint.PowerShell
2.PowerShell Permissions
To use SharePoint cmdlets, a user must be a member of the SharePoint_Shell_Access role for the farm configuration database as well as a member of the WSS_ADMIN_WPG group on the SharePoint front-end server. To grant users the appropriate permissions, use the following command:
Add-SPShellAdmin -Username domain\username -database
(Get-SPContentDatabase -> -webapplication)
Each user must be explicitly granted permissions to every database to which he or she needs access. By default, only the account used to sett up SharePoint will have permission to execute this command.
3.Working with Site Collections and Sites
Most of the cmdlets commonly used in the management of site collections or sites end in SPSite or SPWeb. To pick
up a reference to a site collection, we can use the following:
$site=Get-SPSite -Identity
Or
we can return a list of all site collections by using this:
Get-SPSite
When it comes to managing site objects (SPWeb), we can pick up a specific web site using this:
$web=Get-SPWeb -Identity
To return a list of sites, we need to use either the Site parameter or an SPSite object:
Get-SPWeb -Site
or
Get-SPWeb -Site $site
Creating Site Collections and Sites
We can create a new site collection using the New-SPSite cmdlet:
New-SPSite -Url https://localhost/Sites/NewSiteCollection- OwnerAlias username
We can also add new sites using the New-SPWeb cmdlet:
New-SPWeb -Url https://localhost/Sites/NewSiteCollection/NewWeb -Name MyNewWeb
Deleting Site Collections and Sites
We can delete site collections and sites by using the Remove-SPSite or the Remove-SPWeb cmdlet.
Remove-SPWeb -Identity https://localhost/Sites/NewSiteCollection/NewWeb
or
Remove-SPSite -Identity https://localhost/Sites/NewSiteCollection
Setting Properties on SharePoint Objects
When setting properties on the objects returned by SharePoint management cmdlets, we need to call the Update method in the same manner as when updating properties using the Server Object Model. Here’s an example:
$web=SP-GetSPWeb -Identity https://myweburl
$web.Title="My New Title"
$web.Update()
4.Working with Lists and Libraries
Similarly to how lists and libraries are accessed in the Server Object Model, they can be accessed via SPWeb objects. For example, we can enumerate the lists on a site using the following:
Get-SPWeb -Identity | Select -Expand lists| Select Title
We can add new lists using the Add method of the Lists property:
Get-SPWeb -Identity | ForEach {$_.Lists.Add("My Task List", "", $_.ListTemplates["Tasks"])}
Changing the Business Connectivity Thresholds
The maximum number of rows that can be retrieved via a Business Connectivity Services (BCS) connection is limited. The only way to change this value is via PowerShell. We can use the following command to retrieve the current settings:
$proxies=Get-SPServiceApplicationProxy | Where {$_.TypeName -like "Business Data*"} $rule=Get-SPBusinessDataCatalogThrottleConfig -ServiceApplicationProxy $proxies -Scope -> Database -ThrottleType Items $rule
We can then update the value using the following:
Set-SPBusinessDataCatalogThrottleConfig -Identity $rule -Maximum 10000 Default 10000
5.Working with Content
We can retrieve a list of all items in a site using the following:
Get-SPWeb -Identity | Select -Expand Lists | Select -Expand Items |->select Name, Url
Or
we can apply a filter to show only documents:
Get-SPWeb -Identity | Select -Expand Lists | Where {$_.BaseType -eq -> "DocumentLibrary"} | Select -Expand Items | select Name, Url
We can also make use of filters to search for a specific item:
Get-SPWeb -Identity https://myweburl | Select -Expand Lists | Select -Expand Items | -> Where {$_.Name -like "foo*"} | select Name, Url
Creating New Documents
To create a new document in a document library, use the following:
function New-SPFile($WebUrl, $ListName, $DocumentName,$Content)
{
$stream = new-object System.IO.MemoryStream
$writer = new-object System.IO.StreamWriter($stream)
$writer.Write($content)
$writer.Flush()
$list=(Get-SPWeb $WebUrl).Lists.TryGetList($ListName)
$file=$list.RootFolder.Files.Add($DocumentName, $stream,$true)
$file.Update()
}
New-SPFile -WebUrl "" -ListName "Shared Documents" -DocumentName ->
"PowerShellDocument.txt" -Content "Document Content"
6.Working with Timer Jobs
SharePoint makes use of timer jobs to perform a lot of back-end processing. We can use PowerShell to get a list of all timer jobs:
Get-SPTimerJob
Or
we can get a list of job failures grouped by the job name:
Get-SPTimerJob | Select -Expand HistoryEntries | Where {$_.Status -ne "Succeeded"} -> | group JobDefinitionTitle
Comments
- Anonymous
March 08, 2012
Very useful . Thanks Kunal.