SharePoint Online: PowerShell kullanarak Liste İçerik Türünden Bir Alanı Kaldırma


Gereksinim: SharePoint Online'daki SharePoint listesi içerik türünden bir alanı kaldırın.

SharePoint Online'da Liste içerik türünden Bir Alan Nasıl Kaldırılır?

SharePoint Online listesindeki bir içerik türünden bir alanın nasıl kaldırılacağına ilişkin adımlar şunlardır:

Listeye gidin >> Ayarlar >> Liste Ayarları'na tıklayın >> Mevcut içerik türlerinden ilgili içerik türünü seçin >> Silmek istediğiniz sütunu seçin. “İçerik Türü Sütununu Değiştir” sayfasından “Kaldır” düğmesine tıklayın.

SharePoint Online'daki Liste İçerik Türünden Bir Sütunu Kaldırmak için PowerShell:

Bu blog yazısında, SharePoint Online listesinin içerik türünden bir sütunun nasıl silineceğini inceleyeceğiz. Belki alan yanlışlıkla eklenmiştir veya artık ihtiyaç duyulmamaktadır. Ayrıca, SharePoint Online listesi içerik türünden bir sütunu silmek için PowerShell'i nasıl kullanacağınızı da göstereceğiz.


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

Function Remove-ColumnFromListContentType()
{ 
    param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $ListName,
        [Parameter(Mandatory=$true)] [string] $ContentTypeName,
        [Parameter(Mandatory=$true)] [string] $ColumnName
    )

    Try {
        $Cred= Get-Credential
        $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials
    
        #Get the List
        $List = $Ctx.Web.Lists.GetByTitle($ListName)
        $Ctx.Load($List)

        #Get the content type from list
        $ContentTypeColl = $List.ContentTypes
        $Ctx.Load($ContentTypeColl)
        $Ctx.ExecuteQuery()
        
        #Check if the content type exists in the list        
        $ContentType = $ContentTypeColl | Where {$_.Name -eq $ContentTypeName}
        If($ContentType -eq $Null)
        { 
            Write-host "Content Type '$ContentTypeName' doesn't exists in '$ListName'" -f Yellow
            Return 
        }

        #Get the column to delete from content type
        $ContentTypeFieldColl =  $ContentType.Fields
        $Ctx.Load($ContentTypeFieldColl)
        $Ctx.ExecuteQuery()

        $Field = $ContentTypeFieldColl | Where {$_.Title -eq $ColumnName }
        if($Field -eq $null)
        {
            Write-host "Column '$ColumnName' Doesn't exists in Content Type '$ContentTypeName'" -f Yellow
        }
        else
        {
            #Get the field link from content type
            $FieldLinkColl = $ContentType.FieldLinks
            $Ctx.Load($FieldLinkColl)
            
            #Remove field from content type
            $FieldLink = $FieldLinkColl.GetById($Field.Id)
            $FieldLink.DeleteObject()
            $ContentType.Update($false)
            $Ctx.ExecuteQuery() 

            Write-host "Column '$ColumnName' Deleted from '$ContentTypeName' Successfully!" -ForegroundColor Green 
        }
  }
    Catch {
        write-host -f Red "Error Deleting Column from Content Type!" $_.Exception.Message
    } 
}

#Set parameter values
$SiteURL="https://crescent.sharepoint.com"
$ListName="Projects"
$ContentTypeName="Project Template"
$ColumnName="Project Department" #Display Name of the Field

#Call the function
Remove-ColumnFromListContentType -SiteURL $SiteURL -ListName $ListName -ContentTypeName $ContentTypeName -ColumnName $ColumnName

İçerik türünden bir sütunu kaldırdığınızda, bu alan, o içerik türünü kullanan herhangi bir liste veya kitaplıkta yerel bir sütun haline gelir!

Liste İçerik Türünden Bir Alanı Silmek için PnP PowerShell


#Parameters
$SiteURL = "https://Crescentintranet.sharepoint.com/sites/PMO"
$ListName = "Projects"
$ContentTypeName = ""Crescent Project V2"
$FieldName = "Department0" #@"Project_x0020_Manager" #Internal Name

Try {
    #Connect to PnP Online
    Connect-PnPOnline -Url $SiteURL -Interactive
    
    #Get the Client Context
    $Ctx = Get-PnPContext

    #Get the Content Type from the List
    $ContentType = Get-PnPContentType -Identity $ContentTypeName -List $ListName

    #Get the Field from Content type
    $Field = $ContentType.Fields.GetByInternalNameOrTitle($FieldName)
    $Ctx.Load($Field) 
    $Ctx.ExecuteQuery() 

    #Remove the Field from content type
    $ContentType.FieldLinks.GetById($Field.Id).DeleteObject() 
    $ContentType.Update($False) #Update children
    $Ctx.ExecuteQuery()

    Write-host -f Green "Field '$FieldName' has been removed from Content Type!"
}
Catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

İçerik türünden bir alanı kaldırmak için Remove-PnPFieldFromContentType cmdlet'ini de kullanabilirsiniz:


Remove-PnPFieldFromContentType -Field $Field -ContentType $ContentType

İlgili makaleler