Recherche de site Web

SharePoint Online : supprimer un champ du type de contenu de liste à l'aide de PowerShell


Exigence : supprimez un champ du type de contenu de liste SharePoint dans SharePoint Online.

Comment supprimer un type de contenu Champ du type de liste dans SharePoint Online ?

Voici les étapes à suivre pour supprimer un champ d'un type de contenu dans la liste SharePoint Online :

Accédez à la liste >> Cliquez sur Paramètres >> Paramètres de la liste >> Choisissez le type de contenu approprié parmi les types de contenu disponibles >> Sélectionnez la colonne que vous souhaitez supprimer. Cliquez sur le bouton « Supprimer » de la page « Modifier la colonne du type de contenu ».

PowerShell pour supprimer une colonne du type de contenu de liste dans SharePoint Online :

Dans cet article de blog, nous allons explorer comment supprimer une colonne du type de contenu d'une liste SharePoint Online. Il se peut que le champ ait été ajouté par erreur ou qu'il ne soit plus nécessaire. Nous vous montrerons également comment utiliser PowerShell pour supprimer une colonne d'un type de contenu de liste SharePoint Online.


#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

Lorsque vous supprimez une colonne du type de contenu, ce champ devient une colonne locale dans n'importe quelle liste ou bibliothèque utilisant ce type de contenu !

PnP PowerShell pour supprimer un champ du type de contenu de la liste


#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
}

Vous pouvez également utiliser la cmdlet Remove-PnPFieldFromContentType pour supprimer un champ du type de contenu :


Remove-PnPFieldFromContentType -Field $Field -ContentType $ContentType

Articles connexes