Escenario:
Uno de los pasos recomendados en las migraciones de Sharepoint 2007 a 2010, es limpiar el entorno de origen.
Problema:
Por desgracia muchas features que fueron usadas, activadas, retraídas, borradas, etc... al final se quedan como activas o de alguna manera hay referencias en la base de datos de contenidos, estas referencias nos salen como errores al realizar el "preupgradecheck".
Solución MicroSoft:
Utilizar estos programas para limpiar http://archive.msdn.microsoft.com/WssAnalyzeFeatures y http://archive.msdn.microsoft.com/WssRemoveFeatureFrom
Os anticipo que hay muchos casos en los que no es capaz de borrarlas.
Solución Infalible:
Trasteando con la documentación vemos que accediendo mediante object modal se pueden borrar, pero tenemos adicionalmente la opción de FORCE, la cual solo es accesible por código, curiosamente es la única forma limpia de quitar todas estas features corruptas (sin tocar la base de datos de contenidos).
Con este PowerShell que he preparado, dejaremos nuestro entorno limpio de features mal instaladas o con problemas.
Le he puesto una salida a gridView para ver que va borrando.
Tras lanzar este script, desaparecerán los errores relacionados con features corruptas al realizar el preupgradecheck.
Nota: Si hay muchos sitios y muchas webs, el servidor a veces "SE ESTRESA" y da timeouts, yo recomiendo lanzarlo un par de veces.
=====================================
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Portal")
#Author : Roberto Marcos Asensio (info@robertomarcos.com)
function remove-spmissingfeatures([Boolean]$force)
{
$farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
foreach ($spService in $farm.Services) {
if (!($spService -is [Microsoft.SharePoint.Administration.SPWebService])) {
continue;
}
foreach ($webApp in $spService.WebApplications) {
if ($webApp -is [Microsoft.SharePoint.Administration.SPAdministrationWebApplication]) { continue }
#foreach ($site in $webApp.Sites |Where-Object {$_.Url -match "intranet.miempresa.com"} ) {
foreach ($site in $webApp.Sites) {
foreach ($feature in $site.features) {
if ($feature.definition -eq $null) {
$data = @{
"MissingFeature" = $feature.DefinitionId
"Parent"=$feature.parent
"Web" = $site.Url;
}
New-Object PSObject -Property $data
$site.features.remove($feature.DefinitionId,$force)
}
}
foreach ($web in $site.AllWebs ){
foreach ($feature in $web.features) {
if ($feature.definition -eq $null) {
$data = @{
"MissingFeature" = $feature.DefinitionId
"Parent"=$feature.parent
"Web" = $web.Url;
}
New-Object PSObject -Property $data
$web.features.remove($feature.DefinitionId,$force)
}
}
}
}
}
}
}
remove-spmissingfeatures($true) | Out-GridView
No hay comentarios:
Publicar un comentario