How to Add WebPart to the Publishing Page using PowerShell in SharePoint 2013

Sathish Nadarajan
 
Solution Architect
December 11, 2013
 
Rate this article
 
Views
30838

As part of the previous article, the next step would be adding a WebPart to the Page which we created. In the same manner, the script is going to be self-explanatory and straight forward. The explanations were in lined.

 

 # Add PowerShell Snapin
 $snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
 if ($snapin -eq $null) 
 { 
     Add-PSSnapin "Microsoft.SharePoint.Powershell" 
 }
 
 # Get the Site URL
 $SiteUrl = "https://MySiteCollectionURL/"
 
 # Get the Web URL
 $WebUrl = "https://MyWebSiteURL"
 
 # Get the Page on which WE are going to Add the WebPart
 $PageName = "Test.aspx"
 
 # The location of the WEbPart Definition File
 $localWebpartPath = "C:WindowsSystem32MyWebPart.webpart"
 
 # Error Message which is required as a Reference Parameter while Importing the WEbPart
 $errorMsg = "Test Error Message"
 
 # Initializing the SPSite Object
 $Site = Get-SPSite($SiteUrl)
 
 # Get an instance for Publishing Site based on SPSite
 $PubSite = New-Object Microsoft.SharePoint.Publishing.PublishingSite($Site)
 
 # Get the SPWEb Object
 $Web = Get-SPWeb $WebUrl
 
 # Get the Publishing Web Based on the SPWeb Object
 $PubWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($Web)
 
 # The below commented line is to get all the Pages
 #$PubWeb.GetPublishingPages($PageName);
 
 # Get only our Page
 $PublishingPage = $PubWeb.GetPublishingPage("https://MyWebURL/Pages/Test.aspx");
 
 # Make the Web as AllowUnSafeUpdates as true
 $Web.AllowUnsafeUpdates = $true
 
 # Checkout the Publishing Page
 $PublishingPage.CheckOut();
 
 # Get the LimitedWEbPartManager
 $limitedWebPartManager = $PublishingPage.ListItem.File.GetLimitedWebPartManager([System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared);
 
 # Initialize the XmlReaderSettings Object which is required for the XmlReader Object
 $xmlReaderSettings = New-Object System.Xml.XmlReaderSettings
 
 # Create the XmlReader Object by using the WebPart Definition file and the ReaderSettings Object
 $xmlReader = [System.Xml.XmlReader]::Create($localWebpartPath,$xmlReaderSettings);
 
 #Add Web Part to catalogs folder and Get the WebPart Definition Object based on the webpart definition xml file     
 $oWebPartDefinition = $limitedWebPartManager.ImportWebPart($xmlReader,[ref]$errorMsg); 
 
 # Add the WebPart to the WebPartManager by specifing the Zone and the Index.
 $limitedWebPartManager.AddWebPart($oWebPartDefinition,"RightZone",1);
 
 # Checkin the Publishing Page
 $PublishingPage.CheckIn("Test Checkin by Sathish");
 
 # Publish the Page
 $PublishingPage.ListItem.File.Publish("Test Publish By Sathish");
 
 # Revert the AllowUnsafeUpdates to False once we are done.
 $Web.AllowUnsafeUpdates = $false
 
 # I was trying to Approve the Page.  But, if the Approve is enabled on the Pages Library level, 
 # then only we can do that.  Otherwise we cannot.  But the Syntax is correct as below.
 
 # $PageListItem.File.Approve("Page approved automatically by PowerShell script")  
 

 

Hope the above scripts will be executing without any problem. If you face any issue, please let me know. Thanks.

Happy Coding.

Sathish Nadarajan.

Author Info

Sathish Nadarajan
 
Solution Architect
 
Rate this article
 
Sathish is a Microsoft MVP for SharePoint (Office Servers and Services) having 15+ years of experience in Microsoft Technologies. He holds a Masters Degree in Computer Aided Design and Business ...read more
 

Leave a comment