เอา Web Part ออกจากหน้าทั้งหมดใน SharePoint Site Collection โดยใช้ PowerShell
ข้อกำหนด: หลังจากการโยกย้าย SharePoint จาก SharePoint 2013 ไปยัง SharePoint 2016 เราได้ตัดสินใจลบ web part ที่เสียหายออกจากทุกเพจไม่ว่าจะใช้งานอยู่ที่ใด
จะลบ Web Part ออกจากเพจใน SharePoint ได้อย่างไร
เมื่อต้องการเอา web part ออกจากหน้า คุณสามารถแก้ไขหน้าและลบ web part ได้ ในกรณีที่เพจหยุดทำงาน ให้ใช้โหมดการบำรุงรักษา web part โดยการผนวก “?contents=1” เข้ากับ URL แล้วเอา web part ที่ไม่ต้องการออก เช่น https://intranet.crescent.com/SitePages/Home.aspx?contents=1
PowerShell เพื่อเอา Web Part ออกจากทุกหน้าในไซต์คอลเลกชัน:
แทนที่จะลบ web part จากทุกหน้าจากเบราว์เซอร์ เราสามารถใช้ประโยชน์จาก PowerShell เพื่อเอา web part เฉพาะออกจากทุกหน้าในไซต์คอลเลกชันได้
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Configuration parameters
$SiteURL = "https://intranet.crescent.com"
$WebPartTypeName="*BambooCalendar*"
#Get All Subsites in a site collection and iterate through each
$Site = Get-SPSite $SiteURL
ForEach($Web in $Site.AllWebs)
{
Write-host Processing $Web.URL
# If the Current Web is Publishing Web
if ([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($Web))
{
#Get the Publishing Web
$PubWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($Web)
#Get the Pages Library
$PagesLib = $PubWeb.PagesList #Pages Library
}
else
{
$PagesLib = $Web.Lists["Site Pages"]
}
#Iterate through all Pages
foreach ($Page in $PagesLib.Items | Where-Object {$_.Name -match ".aspx"})
{
$WebPartsToDelete = @()
$PageURL=$web.Url+"/"+$Page.File.URL
write-host $pageurl
$WebPartManager = $Page.File.GetLimitedWebPartManager([System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)
#Get All Web Parts of given type
foreach ($WebPart in $WebPartManager.WebParts | Where-Object { $_.GetType().ToString() -like $WebPartTypeName} )
{
write-host "Found the Web Part at "$PageURL -f Green
$WebPartsToDelete += $WebPart.ID
}
#If the web part to delete is found
If($WebPartsToDelete)
{
#Checkout if required
if ($Page.File.RequiresCheckout)
{
if ($Page.File.CheckOutStatus -ne "None")
{
write-host "Overriding Checkout..."
$Page.File.UndoCheckOut()
}
write-host "Checking Out..."
$Page.File.CheckOut()
}
#Remove the web part from page
foreach ($WebPart in $WebPartsToDelete)
{
Write-Host "Deleting Web Part on $($web.Url)/$($page.Url)"
$WebPartManager = $Page.File.GetLimitedWebPartManager([System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)
$WebPartManager.DeleteWebPart($WebPartManager.webParts[$webPart])
}
if ($Page.File.CheckOutStatus -ne "None")
{
Write-host "CheckIn-In..."
$Page.File.CheckIn("Deleted web part")
$Page.File.Publish('')
}
if ($Page.ParentList.EnableModeration)
{
write-host "Approving..."
$Page.File.Approve('')
}
}
}
}
สคริปต์นี้จะวนซ้ำไซต์และหน้าทั้งหมดในไซต์คอลเลกชันทั้งหมด และเอา web part ที่กำหนดออก
