Búsqueda de sitios web

SharePoint Online: busque el uso de columnas del sitio en tipos de contenido usando PowerShell


Requisito: Buscar el uso de la columna del sitio en el tipo de contenido en la colección de sitios de SharePoint Online.

Un poco de historia: al intentar eliminar una columna de sitio en SharePoint Online, apareció un mensaje de error: “las columnas de sitio que están incluidas en tipos de contenido no se pueden eliminar. Elimine todas las referencias a la columna de este sitio antes de eliminarla”.

Entonces, ¿cómo saber dónde se utiliza una columna de sitio?

PowerShell para encontrar el uso de la columna del sitio en tipos de contenido:

Este script de PowerShell recorre todos los tipos de contenido del sitio, comprueba si se hace referencia a la columna del sitio en particular en alguno de ellos y genera el resultado.


#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 to get a particular Site column usage in content types 
Function Get-SPOSiteColumnUsage([String]$SiteURL, [String]$SiteColumnInternalName)
{
    Try{
        Write-host -f Yellow "Processing Site:" $SiteURL

        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
    
        #Get All Content Types of the Web
        $Ctx.Load($Ctx.Web)
        $Ctx.Load($Ctx.Web.Webs)
        $ContentTypes = $Ctx.web.ContentTypes
        $Ctx.Load($ContentTypes)
        $Ctx.ExecuteQuery()

        #Leave Hidden content types
        $ContentTypes = $ContentTypes | Where {$_.Group -ne "_Hidden"}
        Write-host -f Yellow "`t Found $($ContentTypes.count) Content Types"

        #Loop through each content types Field
        ForEach($ContentType in $ContentTypes)
        {
            Write-host -f Yellow "`t `t Scanning Content Type $($ContentType.Name)"
            $Ctx.Load($ContentType.Fields)
            $Ctx.ExecuteQuery()

            ForEach($Field in $ContentType.Fields)
            {
                If($Field.InternalName -eq $SiteColumnInternalName)
                {
                    Write-host -f Green "`t `t Found the Site Column in Content Type '$($ContentType.Name)' at Site '$($SiteURL)'"
                }
            }
        }

        #Iterate through each subsite of the current web
        foreach ($Subweb in $Ctx.web.Webs)
        {
            #Call the function recursively
            Get-SPOSiteColumnUsage $Subweb.url $SiteColumnInternalName
        }
    }
    Catch {
    write-host -f Red "Error Generating Site Column Usage Report!" $_.Exception.Message
    }
}

#Config Parameters
$SiteURL="https://crescent.sharepoint.com"
$SiteColumnInternalName="TotalInvestment"

#Get Credentials to connect
$Cred= Get-Credential

#Call the function to get the content type usage
Get-SPOSiteColumnUsage $SiteURL $SiteColumnInternalName 

Este script escanea todos los tipos de contenido e imprime los resultados:

Artículos relacionados