Skip to content

Instantly share code, notes, and snippets.

@vaderj
Last active June 12, 2018 17:00
Show Gist options
  • Save vaderj/235426ad355e2e1dcef840e27d58e91a to your computer and use it in GitHub Desktop.
Save vaderj/235426ad355e2e1dcef840e27d58e91a to your computer and use it in GitHub Desktop.
Add a web part to a publishing page #PowerShell #SharePoint
############
#
# From:
# http://www.sharepointpals.com/post/How-to-Add-WebPart-to-the-Publishing-Page-using-PowerShell-in-SharePoint-2013
#
#
############
# 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:\Windows\System32\MyWebPart.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")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment