1. Here is the code: Add WebPart in Publish Site
Example : AddWebPartPublish http://localhost "/Pages/Publish.aspx" "Shared Documents" "Header" "0"
###########################################################################
# $siteUrl : The site url -Example: http://localhost #
# $pagePath: The page path #
# $listName: The name of list that should be added. -Example: Birthdays #
# $webpartZone: The zone in page - Example: "Header" #
# $index: The index of web part in the zone -Example: "0" #
###########################################################################
# Import the Microsoft.SharePoint.PowerShell if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin Microsoft.SharePoint.PowerShell } Add-PSSnapin System.Reflection -erroraction silentlyContinue function AddWebPartPublish($siteUrl, $pagePath, $listName, $webpartZone, $index) { $pageUrl = $siteUrl + $pagePath $spWeb = Get-SPWeb $siteUrl -ErrorAction Stop [Microsoft.SharePoint.Publishing.PublishingWeb]$pubWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($spWeb); $allowunsafeupdates = $spWeb.AllowUnsafeUpdates $spWeb.AllowUnsafeUpdates = $true $page = $spWeb.GetFile($pageUrl); if ($page.Level -eq [Microsoft.SharePoint.SPFileLevel]::Checkout) { if ($page.CheckedOutBy.UserLogin -eq $spWeb.CurrentUser.UserLogin) { write-host "Page has already been checked out " } else { $SPWeb.CurrentUser.LoginName $page.UndoCheckOut() $page.CheckOut() write-host "Check out the page override" } } else { $page.CheckOut() write-host "Check out the page" } try{ #Initialise the Web part manager for the specified profile page. $spWebPartManager = $spWeb.GetLimitedWebPartManager($pageUrl, [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared) # Check list is exist or not foreach($list in $spWeb.Lists) { if($list.Tostring() -eq $listName) { write-host "The list named $list is existing" #$ListViewWebPart = New-Object Microsoft.SharePoint.WebPartPages.ListViewWebPart $ListViewWebPart = New-Object Microsoft.SharePoint.WebPartPages.XsltListViewWebPart $listViewWebPart.Title = $listName $ListViewWebPart.ListName = ($list.ID).ToString("B").ToUpper() #$ListViewWebPart.ChromeType = "none" $ListViewWebPart.ViewGuid = ($list.Views[0].ID).ToString("B").ToUpper() $spWebPartManager.AddWebPart($ListViewWebPart, $webpartZone, $index) $spWebPartManager.SaveChanges($ListViewWebPart) break; } } #Check to ensure the page is checked out by you, and if so, check it in if ($page.CheckedOutBy.UserLogin -eq $spWeb.CurrentUser.UserLogin) { $page.CheckIn("Page checked in automatically by PowerShell script") Write-Output "Page has been checked in" } $page.Publish("Published") Write-Output "Page has been published success" $pubWeb.Close() $spWeb.Update() if($flag -eq 0) { write-host "Not exist" } else { Write-Output "success" } } catch { write-host "(ERROR : "$_.Exception.Message")" throw } finally { $spWeb.Dispose() } }
2. Here is the code: Delete WebPart in Publish Site
Example : RemoveWebPart " http://localhost" "/Pages/Publish.aspx" "Shared Documents"
###########################################################################
# $siteUrl : The site url -Example: http://localhost #
# $pagePath: The page path #
# $listName: The name of list that should be added. -Example: Birthdays #
###########################################################################
# Import the Microsoft.SharePoint.PowerShell if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin Microsoft.SharePoint.PowerShell } function RemoveWebPart($siteUrl, $pagePath, $name) { #$web = $site.OpenWeb("/Ops") # Check the parameter is null or not if($siteUrl.trim() -eq $null -or $name.trim() -eq $null -or $pagePath.trim() -eq $null) { write-host "The parameter is null" return } $pageUrl = $siteUrl + $pagePath $spWeb = Get-SPWeb $siteUrl -ErrorAction Stop [Microsoft.SharePoint.Publishing.PublishingWeb]$pubWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($spWeb); $allowunsafeupdates = $spWeb.AllowUnsafeUpdates $spWeb.AllowUnsafeUpdates = $true $page = $spWeb.GetFile($pageUrl); if ($page.Level -eq [Microsoft.SharePoint.SPFileLevel]::Checkout) { if ($page.CheckedOutBy.UserLogin -eq $spWeb.CurrentUser.UserLogin) { write-host "Page has already been checked out " } else { $SPWeb.CurrentUser.LoginName $page.UndoCheckOut() $page.CheckOut() write-host "Check out the page override" } } else { $page.CheckOut() write-host "Check out the page" } try{ #Initialise the Web part manager for the specified profile page. $spWebPartManager = $spWeb.GetLimitedWebPartManager($pageUrl, [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared) $flag = 0 #Circle all the Webparts in the specified page foreach ($webpart in $spWebPartManager.WebParts) { #write-host $siteUrl +": Existing Web part - " + $webpart.Title + " : " + $webpart.ID if($webpart.Title -eq $name) { $spWebPartManager.DeleteWebPart($spWebPartManager.WebParts[$webpart.ID]) $spWebPartManager.SaveChanges($webpart) Write-Output "Delete the webpart" $flag = 1 break; } } #Check to ensure the page is checked out by you, and if so, check it in if ($page.CheckedOutBy.UserLogin -eq $spWeb.CurrentUser.UserLogin) { $page.CheckIn("Page checked in automatically by PowerShell script") Write-Output "Page has been checked in" } $page.Publish("Published") Write-Output "Page has been published success" $pubWeb.Close() $spWeb.Update() if($flag -eq 0) { write-host "Not exist" } else { Write-Output "success" } } catch { write-host "(ERROR : "$_.Exception.Message")" throw } finally { $spWeb.Dispose() } }