Script de powershell para copiar todos los sitios de una colección de sitios a otra colección de sitios en SharePoint 2010

Hola bloggers, les comparto un script de powershell para SharePoint 2010 que puede ser de mucha ayuda en sus rutinas diarias de administración de sitios. se puede ejecutar usando el ambiente de desarrollo para powershell Integrated Scripting Enviromental (ISE).

Pueden descargarlo aqui

Designed By: Andrés Rojas

Add-PSSnapin microsoft.sharepoint.powershell
[void][System.Reflection.Assembly]::LoadWithPartialName(‘Microsoft.VisualBasic’)
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

$var_nameExport = "";
$var_nameExport = [Microsoft.VisualBasic.Interaction]::InputBox(“Aplicación web desde donde se va a exportar”, “Migración de sitios web”)
 
if ($var_nameExport.length -ne 0)
{
    $resultadoExport = [System.Windows.Forms.MessageBox]::Show($var_nameExport, "Valor Ingresado de la coleccion a exportar",[Windows.Forms.MessageBoxButtons]::OKCANCEL,[Windows.Forms.MessageBoxIcon]::Information)

    if ($resultadoExport -eq "OK")
    {
        write-host "Resultado de Messagebox export:" $resultadoExport;

        $appwebtoexport = $var_nameExport + "/";
        $appwebtoexport;

        $var_nameImport = "";
        $var_nameImport = [Microsoft.VisualBasic.Interaction]::InputBox(“Aplicación web a donde va a importar”, “Migración de sitios web”)

        if ($var_nameImport.length -ne 0)
        {
       
            $resultadoImport = [System.Windows.Forms.MessageBox]::Show($var_nameImport, "Valor Ingresado de la coleccion a importar",[Windows.Forms.MessageBoxButtons]::OKCANCEL,[Windows.Forms.MessageBoxIcon]::Information)       
           
            if ($resultadoImport -eq "OK")
            {
           
                write-host "Resultado de Messagebox import:" $resultadoImport;           
           
                $appwebtoimport = $var_nameImport + "/";
                $appwebtoimport;
               
                $var_nameFile = "";
                $var_nameFile = [Microsoft.VisualBasic.Interaction]::InputBox(“Ruta donde se almacenarán los archivos .bak”, “Migración de sitios web”)

                if ($var_nameFile.length -ne 0)
                {

                    $resultadoPath = [System.Windows.Forms.MessageBox]::Show($var_nameFile, "Valor Ingresado de la Ruta",[Windows.Forms.MessageBoxButtons]::OKCANCEL,[Windows.Forms.MessageBoxIcon]::Information)       
           
                    if ($resultadoPath -eq "OK")
                    {
           
                        write-host "Resultado de Messagebox path:" $resultadoPath;           

                       
                        $pathfile = $var_nameFile + "\";
                        $pathfile;

                        $sitios = get-spsite $appwebtoexport | get-spweb -limit all

                        foreach ($subsitio in $sitios){
                            if ($subsitio.title -eq "PWA Hosting")
                            {
                                write-host "es el root, no se toma en cuenta para la exportacion, creacion e importacion de sitios";
                            }
                            else
                            {
                                $pathfullfile = $pathfile + $subsitio.name + ".bak"
                                #exporta los sitios de la coleccion de sitios inicial
                                $exportarsitio = export-spweb $subsitio.url -path $pathfullfile
                                write-host "Sitio web exportado:";
                                $subsitio.url;
                                #write-host "Ruta Archivo:" $pathfullfile;
                               
                                #crea los sitios en la nueva coleccion de sitios con la plantilla PWS#0
                                $parametro = $appwebtoimport + $subsitio.name;
                                New-SPWeb $parametro -Template "PWS#0" -Language 3082 -Name $subsitio.name
                                write-host "Sitio web creado:";
                                $parametro;
                                #write-host "Donde importar:" $appwebtoimport $subsitio.name
                               
                                #exporta los sitios de la coleccion de sitios final
                                $parametro2 = $appwebtoimport + $subsitio.name;
                                Import-SPWeb $parametro2 -Path $pathfullfile
                                write-host "Sitio web importado:";
                                $appwebtoimport + $subsitio.name;
                                write-host "De la ruta:";
                                $pathfullfile;
                                #write-host "Importacion:" $appwebtoimport $subsitio.name " - " $pathfullfile
                               
                            }
                        }
                    }
                }
                else
                {
                    [System.Windows.Forms.MessageBox]::Show("Debe ingresar un valor de la ruta donde quedarán los documentos exportados en .bak", "Valor Ingresado Errado",[Windows.Forms.MessageBoxButtons]::OK,[Windows.Forms.MessageBoxIcon]::Error)           
                }
            }
        }
        else
        {
            [System.Windows.Forms.MessageBox]::Show("Debe ingresar un valor para la coleccion a donde va aimportar", "Valor Ingresado Errado",[Windows.Forms.MessageBoxButtons]::OK,[Windows.Forms.MessageBoxIcon]::Error)   
        }
    }
}
else
{
    [System.Windows.Forms.MessageBox]::Show("Debe ingresar un valor para la coleccion de sitios a exportar", "Valor Ingresado Errado",[Windows.Forms.MessageBoxButtons]::OK,[Windows.Forms.MessageBoxIcon]::Error)
}

3 comentarios:

Anónimo dijo...

Pero luego que hago con los archivos .bak guardados en la ruta especificada. Tengo que restaurarlos? como?

Andres Rojas dijo...

Hola, los .bak se importan directamente a la aplicación web.. una vez terminado el script, todo queda restaurado.

Esta parte del script hace la importación:

$parametro2 = $appwebtoimport + $subsitio.name;
Import-SPWeb $parametro2 -Path $pathfullfile
write-host "Sitio web importado:";
$appwebtoimport + $subsitio.name;
write-host "De la ruta:";
$pathfullfile;
#write-host "Importacion:" $appwebtoimport $subsitio.name " - " $pathfullfile

slds,

Andres Rojas

Leonardo Acosta Piedra dijo...

Buenas,

Tengo un sitio de SharePoint 2013, está constituido por un sitio principal con su propio home de noticias, y cinco subsitios mas, cada uno de ellos con su propio home de noticias. Consulta, como puedo hacer para que cada noticia que publiquen en los subsitios se repliquen en el sitio de noticias del home principal.

Publicar un comentario en la entrada