Quantcast
Channel: TechNet Blogs
Viewing all articles
Browse latest Browse all 34890

Error Missing Assembly en el Health Analyzer

$
0
0

Uno de los hallazgos más comunes en el Health Analyzer, cuando se desarrollan soluciones a la medida en SharePoint 2010 es el siguiente:

 

Assembly [My.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cfc9a4dcd383ae1e] is referenced in the database [WSS_Content], but is not installed on the current farm. Please install any feature/solution which contains this assembly.

 

La mayoría de las veces el hallazgo es acerca de Recibidores de Eventos que no han sido correctamente desinstalados, ya sea en la desactvación o eliminación de la solución.

 

En esta entrada de blog pretendo compartir con ustedes un script de Power Shell con el don de ayudar a identificar y remover estos Recibidores de Eventos corruptos.

 

El script contiene las siguientes funciones:

 

Delete-MissingAssembly: Esta es la función principal que recorre cada posible contenedor en la base de datos que pueda tener Recibidores de Eventos, esto quiere decir Colección de listas, Sitios o Listas.

 

Remove-EventReceiver: Esta función revisa si un contenedor de Recibidores de Eventos tiene alguno con el nombre de assembly que se le pase como parámetro, y trata de eliminarlo.

 

Las 2 funciones tienen un parámetro (ReportOnly) que permite definir si se quiere eliminar o no el Recibidor de Evento encontrado.

 

functionDelete-MissingAssembly($ContentDb,$Assembly,[switch]$ReportOnly)

{

       [bool]$report=$false

       if ($ReportOnly) { $report=$true }

       $database=Get-SPContentDatabase|?{$_.Name -eq$ContentDb}

    foreach($sitein$database.Sites)

    {

        Remove-EventReceiver-ERContainer$site-Assembly$Assembly-ReportOnly$report

        foreach($webin$site.AllWebs)

        {

            Remove-EventReceiver-ERContainer$web-Assembly$Assembly-ReportOnly$report

            foreach($listin$web.Lists)

            {

                Remove-EventReceiver-ERContainer$list-Assembly$Assembly-ReportOnly$report

            }

        }

    }

}

 

functionRemove-EventReceiver($ERContainer,$Assembly,$ReportOnly)

{

    foreach($erin$ERContainer.EventReceivers)

       {

             if($er.Assembly -eq$Assembly)

             {

                    Write-Host"Event Receiver with Id["$er.Id "], Name["$er.Name "] and Type ["$er.Type "] found in ["$ERContainer.Url $ERContainer.DefaultViewUrl "]."

                    if($ReportOnly-eq$false)

                    {

                Write-Host"Try to delete the receiver:"   

                $er.Delete()

                Write-Host"ER deleted."

                    }

             }

       }

}

 

 

Después de que usted guarde este script en un archivo PS1 y lo importe en Power Shell (Ejemplo: Import-Module .\MissingEV.PS1), usted puede ejecutar el script de esta forma:

 

Delete-MissingAssembly-ContentDbWSS_Content-Assembly"My.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cfc9a4dcd383ae1e"-ReportOnly

 

La salida de ejecución del comando puede ser:

 

Como se puede ver en la salida de Power Shell, muestra el Id, Nombre, Tipo y ubicación del Recibidor de Eventos, donde usted puede decidir si borrar o no este, por lo contrario debería utilizar otra herramienta o directamente con PS.

 

Espero que esta entrada sirva para resolver los típicos problemas del hallazgo “Missing server dependencies” en el Health Analyzer.

 


Viewing all articles
Browse latest Browse all 34890

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>