Buscar uso de columnas del sitio de SharePoint: informe
Al intentar eliminar una columna del sitio de SharePoint, me apareció una alerta que decía "Las columnas del sitio que están incluidas en los tipos de contenido no se pueden eliminar". Elimine todas las referencias a esta columna del sitio antes de eliminarla”.
Muy bien, usemos PowerShell para encontrar qué listas o tipos de contenido usan una columna de sitio en particular, antes de eliminarla.
Script de PowerShell para buscar y eliminar una columna de sitio del tipo de contenido
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
$web= Get-SPWeb "https://sharepoint.crescent.com/sites/operations"
$ColumnInternalName = "BranchLocation"
#Get All Content Types
$CTypes = $web.site.rootweb.ContentTypes
foreach($ContentType in $CTypes)
{
$FieldInUse = $ContentType.FieldLinks | Where {$_.Name -eq $ColumnInternalName }
if($FieldInUse -ne $null)
{
Write-Host "Found the Column in Content Type:" $ContentType.Name -ForegroundColor DarkGreen
#To Remove the field from content type, uncomment below two lines
#$ContentType.FieldLinks.Delete($ColumnInternalName)
#$ContentType.Update()
}
}
¡Hecho! Nuevamente, al intentar eliminar la columna del sitio, recibí "Esta columna del sitio se eliminará y todas las columnas de la lista que se crearon a partir de ella quedarán huérfanas permanentemente". ¿Está seguro de que desea eliminar esta columna del sitio?
Bueno, ¿qué significa? Las columnas del sitio se crean para minimizar duplicados y brindar coherencia. Entonces, si eliminamos una columna de sitio, todas las columnas de lista/biblioteca creadas seguirán manteniendo sus valores. No habrá ningún impacto en los datos. Pero se convertirán en columnas locales. Muy bien, antes de eliminar una columna del sitio, veamos dónde se utiliza realmente. Busquemos todas las referencias de nuestra columna de sitio en una colección de sitios en particular usando PowerShell.
Script de PowerShell para buscar el uso de la columna de un sitio en las listas
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Site URL
$SiteURL = "https://sharepoint.crescent.com/sites/operations"
#Column to search
$ColumnInternalName = "BranchLocation"
#Get the Web
$Site = Get-SPSite $SiteURL
#Get the Column
$column = $site.RootWeb.Fields.GetFieldByInternalName($ColumnInternalName)
#Find all List usages of the column
$SiteColumnUsages = $column.ListsFieldUsedIn() #Gets the WebID & ListID values
#Get the lists where the site column is being used
foreach( $Usage in $SiteColumnUsages )
{
$Site.AllWebs | foreach {$_.Lists} | where {$_.ID -eq $Usage.ListID } | Select Title, ParentWebURL, RootFolder
}
Write-Host "Checking Lists to Remove the Site column..."
foreach( $Usage in $SiteColumnUsages )
{
#Remove columns from Lists where its used
$List = $Site.AllWebs | foreach {$_.Lists} | where {$_.ID -eq $Usage.ListID }
if($List.Fields.ContainsFieldWithStaticName($ColumnInternalName))
{
$field = $List.Fields.GetFieldByInternalName($ColumnInternalName)
## Uncomment these four lines to actually delete a site column from Lists
#$field.AllowDeletion = $true
#$field.Update()
#$List.Fields.GetFieldByInternalName($ColumnInternalName).Delete()
#$List.Update()
Write-Host "Site column $($ColumnInternalName) has been removed from $($List.RootFolder) at $($List.ParentWeb.URL)"
}
}

