Búsqueda de sitios web

SharePoint Online: eliminar un campo del tipo de contenido de la lista mediante PowerShell


Requisito: Eliminar un campo del tipo de contenido de la lista de SharePoint en SharePoint Online.

¿Cómo eliminar un campo del tipo de contenido de la lista en SharePoint Online?

Estos son los pasos sobre cómo eliminar un campo de un tipo de contenido en la lista de SharePoint Online:

Navegue a la Lista >> Haga clic en Configuración >> Configuración de la lista >> Elija el tipo de contenido relevante entre los tipos de contenido disponibles >> Seleccione la columna que desea eliminar. Haga clic en el botón "Eliminar" de la página "Cambiar columna de tipo de contenido".

PowerShell para eliminar una columna del tipo de contenido de la lista en SharePoint Online:

En esta publicación de blog, exploraremos cómo eliminar una columna del tipo de contenido de una lista de SharePoint Online. Quizás el campo se agregó por error o ya no sea necesario. También le mostraremos cómo usar PowerShell para eliminar una columna de un tipo de contenido de lista de 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

Cuando elimina una columna del tipo de contenido, ese campo se convierte en una columna local en cualquier lista o biblioteca que utilice ese tipo de contenido.

PnP PowerShell para eliminar un campo del tipo de contenido de la lista


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

También puede utilizar el cmdlet Remove-PnPFieldFromContentType para eliminar un campo del tipo de contenido:


Remove-PnPFieldFromContentType -Field $Field -ContentType $ContentType

Artículos relacionados