How to add webPart to Page with PowerShell from WebPart Gallery
-
07-01-2021 - |
Pergunta
I want to get my Custom WebPart by name and add into a Page with PowerShell from (Web part gallery):
--> Edit Page --> Insert --> Web Part --> Custom
WebParts in image are added from Custom Feature(.wsp package) generated by Visual Studio
function AddWebPartsSolution($webAppURL){
$userSolutionFileName = $Infrastructure.WebApplication.UserSolutionFile
Add-SPSolution $scriptBase\Solution\$userSolutionFileName
Install-SPSolution –Identity $userSolutionFileName –WebApplication $webAppURL –GACDeployment
}
function EnableWebPartsFeature($siteCollectionURL){
#Get all Features --> Get-SPFeature | Sort -Property DisplayName
$featureName = $Infrastructure.WebApplication.UserSolutionName
Enable-SPFeature -Identity featureName -Url $siteCollectionURL
}
Image:
I read this example, but PowerShell script get web part from local system. I need to get web part from image.
Where is the folder of Webparts from WebPart Gallery?
How to do this?
Solução
You can try and modify the below PS script:
#ensure that you use the site collection root url
#if you use subsite url, will throw error since webpart gallery
#exists only in the site collection root site
$web = Get-SPWeb "https://site-collection-url"
$pubWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
$publishingPage = $pubWeb.GetPublishingPage("https://site-collection-url/Pages/Test.aspx");
$publishingPage.CheckOut();
$list = $web.Lists["Web Part Gallery"]
#use the webpart title or the .webpart file name
$wpl = $list.Items | where {$_.Title -eq "Your Webpart Name"}
$xmlReader = New-Object System.Xml.XmlTextReader($wpl.File.OpenBinaryStream());
$errorMsg = ""
$wpManager = $publishingPage.ListItem.File.GetLimitedWebPartManager([System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared);
$webPart = $wpManager.ImportWebPart($xmlReader, [ref]$errorMsg)
#insert webpart into header zone at index 1
$wpManager.AddWebPart($webpart,"Header",1)
$publishingPage.CheckIn("Added webpart");
$publishingPage.ListItem.File.Publish("Published");
$wpManager.Dispose()
$web.Dispose()
Modified from:
Outras dicas
Using the Microsoft PNP PowerShell Library, you can add WebParts to pages pretty easily.
For example to add from a webpart file:
Add-PnPWebPartToWebPartPage -ServerRelativePageUrl "/sites/demo/sitepages/home.aspx" -Path "c:\myfiles\listview.webpart" -ZoneId "Header" -ZoneIndex 1
Or to add from XML where $webpart represents the XML:
Add-PnPWebPartToWebPartPage -ServerRelativePageUrl "/sites/demo/sitepages/home.aspx" -XML $webpart -ZoneId "Header" -ZoneIndex 1
Adding to a wiki page has its own cmdlets but also can be added via path or XML:
Add-PnPWebPartToWikiPage -ServerRelativePageUrl "/sites/demo/sitepages/home.aspx" -XML $webpart -Row 1 -Column 1
The site in the link above has examples on how to connect using the PNP library and how to get the WebPartXML if you need it. Good luck!