I want to add a web part to my page created in SitePages, using PowerShell script.
-
What type of webpart? Is the webpart already deployed and available on the site?Amal Hashim– Amal Hashim2015-01-08 12:46:02 +00:00Commented Jan 8, 2015 at 12:46
-
Yes, the web part is already deployed and i just need to add that web part in my page using powershell scriptIshani– Ishani2015-01-08 12:47:07 +00:00Commented Jan 8, 2015 at 12:47
Add a comment
|
2 Answers
Here is a snippet which you can use, the web part XML file should be placed in a local folder.
# 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:\WebParts\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("Checkin");
# Publish the Page
$PublishingPage.ListItem.File.Publish("Publish");
# 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")
- See more at: http://www.sharepointpals.com/post/How-to-Add-WebPart-to-the-Publishing-Page-using-PowerShell-in-SharePoint-2013#sthash.xcdNmxZv.dpuf
-
I have tried this code but its giving me an error near GetPublishingPage like "The SPListItem provided is not compatible with a Publishing Page.".Ishani– Ishani2015-01-08 13:03:35 +00:00Commented Jan 8, 2015 at 13:03
Above code works, create limitedwebpartmanager object using below line.
$limitedWebPartManager = $Web.GetLimitedWebPartManager($PublishingPage.url, [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)