Script para ver donde se esta usando una caracteristica en SharePoint 2010

Es posible que en algun momento dado neceistes saber, donde se esta utilizando una caracteristica dentro de SharePoint 2010, ya que cuando tienes multiples Web Application con muchas colecciones de sitios, es complicado controlarlo y mas aun, si existen varios administradores de sitio, que pueden activar/descativar caracteristicas (Features) a su gusto…

Si se te ha planteado un situacion similar y quieres disponer de un listado de todos los sitios, donde se esta haciendo uso de una caracteristicas (Features) concreta, puedes usar el siguiente script de PowerShell:

#====================================================================================
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration") > $null
[System.Reflection.Assembly]::LoadWithPartialName("System.Collections.Generic") > $null
#====================================================================================
$ContentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService;
$Farm = [Microsoft.SharePoint.Administration.SPFarm]::Farm.Local;
#====================================================================================
function GetFeatureUsageById([string]$FeatureId)
{
	$FeatureGuid = New-Object System.Guid($FeatureId)
	$FeatureDef=$ContentService.Farm.FeatureDefinitions[$FeatureGuid]
	if($FeatureDef -eq $null)
	{
		Write-Host "WARNING: Característica invalida o desconocida"
		return;
	}
	Write-Host "Ambito de la característica: " $FeatureDef.Scope
	if($FeatureDef.Scope -eq [Microsoft.SharePoint.SPFeatureScope]::Farm)
	{
		Write-Host "WARNING: Característica de granaja no soportada"
		return;
	}
	[Microsoft.SharePoint.Administration.SPWebApplicationCollection] $Applications = $ContentService.WebApplications
	foreach($App in $Applications)
	{
		if($FeatureDef.Scope -ne [Microsoft.SharePoint.SPFeatureScope]::WebApplication)
		{
			foreach($TopLevel in $App.Sites)
			{
				if($FeatureDef.Scope -ne [Microsoft.SharePoint.SPFeatureScope]::Site)
				{
					[Microsoft.SharePoint.SPWebCollection] $AllWebs = $TopLevel.AllWebs
					foreach($Web in $AllWebs)
					{
						  $Feature = $Web.Features[$FeatureId];
						  if($Feature -ne $null)
						  {
								Write-Host $Feature.DisplayName " usado en el sitio: " $Web.Url
						  }
						  $Web.Dispose();
					}
				}
				else
				{
					if($TopLevel.Features[$FeatureId] -ne $null)
					{
						Write-Host "Usado por la Coleccion de Sitio: " $TopLevel.Url
					}
				}
			$TopLevel.Dispose();
			}
		}
		else
		{
			if($App.Features[$FeatureId] -ne $null)
			{
			  Write-Host "Usado por la Aplicacion Web: ",$App.Name
			}
		}
	}
}
#====================================================================================
function GetFeatureUsageByName([string]$FeatureName)
{
	$FeatureDef=$ContentService.Farm.FeatureDefinitions[$FeatureName]
	if($FeatureDef -eq $null)
	{
	   Write-Host "WARNING: Característica invalida o desconocida"
	   return
	}
	$FeatureId=$FeatureDef.Id
	GetFeatureUsageById $FeatureId
}
#====================================================================================
#Llamada a la funcion que devuelve la informacion de la caracteristica
#GetFeatureUsageById "8c0cd022-afa0-4f1b-9bbe-4f128c0cf4b3"
#GetFeatureUsageByName "Document Rating Moderators"

La llamada a este script puedes hacerla de dos forma diferentes:

  • Si dispones del GUID puede llamar al metodo: GetFeatureUsageById “8c0cd022-afa0-4f1b-9bbe-4f128c0cf4b3”
  • Por el contrario si sabes el nombre de la caracteristica puedes usar este otro metodo: GetFeatureUsageByName “Document Rating Moderators”

En el script las llamadas a estos dos metodos estan comentados a modo de ejemplo.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *