Archivo de la etiqueta: Caracteristica

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.

 

Scripts para la activación/desactivación de caracteristicas en SharePoint 2010

Una de las muchas cosas que se puede hacer con PowerShell es la activacion/desactivacion de caracteristicas. Me ha ocurrido que hay veces que con el usuario administrador de la granja, no me deja activar caracteristicas desde la Administración Central… y recurro a este tipo de scripts…

Lo primero es la identificación del GUID de la caracteristica que queremos activar/desactivar:

 

#Listado de las caracteristicas de la granaja, ordenado
Get-SPFeature | Sort -Property DisplayName, Id | FT -GroupBy Scope DisplayName,Id

Este seria el resultado de la ejecución del comando Get-SPFeature:

Una vez tenemos el listado de todas las caracteristicas instaladas en la Granaja, solo nos queda localizar y obtener el GUID sobre la que queremos activar/desactivar. A continuacion os indico como se pueden realizar estas acciones a través de script:

#Deshabilita una caracteristica en el sitio: http://url_intranet
Disable-SPFeature –Identity f6924d36-2fa8-4f0b-b16d-06b7250180fa –url http://url_intranet

#Habilita una caracteristica en el sitio: http://url_intranet
Enable-SPFeature –Identity f6924d36-2fa8-4f0b-b16d-06b7250180fa –url http://url_intranet

Puedes consultar mas informacion sobre los comandos: Disable-SPFeature y Enable-SPFeature.