Solucione el error MissingSetupFile de Test-SPContentDatabase en la migración de SharePoint
Problema:
Aparecen errores "MissingSetupFile" cuando ejecuta el cmdlet "Test-SPContentDataBase" en bases de datos de contenido de SharePoint durante un proceso de migración.
[MissingSetupFile] Se hace referencia al archivo [Features\Feature-folder\feature-artifact] [1] veces en la base de datos [SharePoint_Content_database], pero no está instalado en la granja actual. Instale cualquier función/solución que contenga este archivo. Se hace referencia a uno o más archivos de instalación en la base de datos [SharePoint_Content_database], pero no están instalados en la granja actual. Instale cualquier función o solución que contenga estos archivos.
Solución:
Bueno, la resolución es: instalar e implementar todas las soluciones desde la granja de origen hasta la granja de destino. Es posible que su organización haya creado e implementado varias personalizaciones, como productos de terceros (como soluciones Bamboo), soluciones WSP personalizadas, definiciones de sitios, características, receptores de eventos, elementos web, controles de usuario, etc., en el entorno de SharePoint 2010. Debe instalar e implementar todos estos archivos binarios y soluciones en su entorno SharePoint 2013 de destino antes de probar las bases de datos de contenido para una actualización.
Implemente soluciones desde la granja de origen a la granja de destino:
- Vaya a Administración central de SharePoint >> Vaya a “Administración de soluciones” >> Administre soluciones de granja desde la configuración del sistema de su granja de SharePoint 2010 (o cualquier granja de origen de SharePoint).
- Haga un inventario de todas sus soluciones WSP implementadas en la granja. Identifique las aplicaciones web en las que se implementan estas soluciones.
- Descargue todos los archivos WSP y transfiéralos a la granja de destino. Implemente todos ellos en el destino según la granja de origen.
En lugar de realizar manualmente los pasos anteriores, puede utilizar PowerShell para automatizar:
- Cómo extraer y descargar todos los archivos de la solución WSP en SharePoint
- Cómo instalar e implementar múltiples soluciones WSP usando PowerShell en SharePoint
¿Qué sucede si no necesita esos artefactos de funciones que faltan, como elementos web, en su granja de Target y limpiar los archivos de configuración que faltan de la base de datos de contenido?
Script de PowerShell para buscar y eliminar archivos de instalación faltantes:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
Function Run-SQLScript($SQLServer, $SQLDatabase, $SQLQuery)
{
$ConnectionString = "Server =" + $SQLServer + "; Database =" + $SQLDatabase + "; Integrated Security = True"
$Connection = new-object system.data.SqlClient.SQLConnection($ConnectionString)
$Command = new-object system.data.sqlclient.sqlcommand($SQLQuery,$Connection)
$Connection.Open()
$Adapter = New-Object System.Data.sqlclient.sqlDataAdapter $Command
$Dataset = New-Object System.Data.DataSet
$Adapter.Fill($Dataset)
$Connection.Close()
$Dataset.Tables[0]
}
#Define configuration parameters
$Server="Ab-SQL-001"
$Database="SP10_Content_KM"
$SetupFile="Features\Crescent.Intranet.WebParts\WEFnews\WEFnews.dwp"
#Query SQL Server content Database to get information about the MissingFiles
$Query = "SELECT * from AllDocs where SetupPath like '"+$SetupFile+"'"
$QueryResults = @(Run-SQLScript -SQLServer $Server -SQLDatabase $Database -SQLQuery $Query | select Id, SiteId, WebId)
#Iterate through results
foreach ($Result in $QueryResults)
{
if($Result.id -ne $Null)
{
$Site = Get-SPSite -Limit all | where { $_.Id -eq $Result.SiteId }
$Web = $Site | Get-SPWeb -Limit all | where { $_.Id -eq $Result.WebId }
#Get the URL of the file which is referring the feature
$File = $web.GetFile([Guid]$Result.Id)
write-host "$($Web.URL)/$($File.Url)" -foregroundcolor green
#$File.delete()
}
}
Este script le proporciona todas las ubicaciones donde se hace referencia al archivo de instalación que falta (¡y, opcionalmente, las elimina!). ¡No olvides configurar las variables $Server, $Database y $SetupFile apropiadamente!
