ค้นหาเว็บไซต์

เอา 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 ที่กำหนดออก

บทความที่เกี่ยวข้อง