viernes, 8 de junio de 2012

Script para la Creación en masa de colecciones de sitios con sus respectivas bases de datos de contenido individuales en PowerShell para SharePoint 2010

Dentro de las recomendaciones de Microsoft están el separar las colecciones de sitios en bases de datos de contenido separadas ayudan a la maniobrabilidad, recuperación, respaldo del contenido ingresado en el portal, ya que Microsoft ha definido un umbral para el tamaño de las bases de datos de contenido de 100 GB para no afectar el rendimiento y cómo máximo 200 GB si es una única colección de sitios dentro de la base de datos de contenido.  Este número debe de tomarse en cuenta incluyendo el contenido que el usuario ha eliminado y que esta aún en la papelera de reciclaje y que es controlado si hemos definido una cuota para la colección de sitios.

Una Aplicación Web puede hospedar hasta 300 bases de datos de contenido y por instancia de base de datos de SQL Server el número es de 50 base de datos y SharePoint Server Enterprise Edition consta de por lo menos 22 base de datos entre servicios, configuración y contenido por lo que tenemos alrededor de 28 base de datos por la instancia de SQL primaria que tengamos disponibles.  Por servidor Web el número es de 10 Application Pools para no afectar el rendimiento y esto se reparte en Servicios de Aplicación y Aplicaciones Web por lo que estamos tener alrededor de 5 Aplicaciones Web en cada servidor Web Front End disponible.   Esta información pueden verificarla en http://technet.microsoft.com/en-us/library/cc262787.

Como vemos se debe de planear cuidadosamente la creación de las bases de datos de contenido y sus colecciones, por lo que es necesario automatizar esta tarea luego de contar con la distribución adecuada para crear la bases y colecciones.  En el siguiente ejemplo vamos a realizar un script para automatizar este proceso y facilitar la creación de bases y colecciones. 

Escenario:

Se deben de crear bases y colecciones para las aplicaciones desarrolladas para SharePoint con la plantilla de sitios en blanco.  El formato de la dirección URL para cada sitio debe de ser el siguiente: https://FQDN/app/[site collection name] donde app el la ruta administrada para indicar donde inician las colecciones de sitios.  El listado de aplicaciones es el siguiente:

· Ventas

· Monitoreo de rutas

· Monitoreo de Indicadores Claves de Gestión

· Cambio de contraseñas

· Automatización de Formularios

· Recursos Humanos

· Portal Corporativo

· Reuniones

Solución:

Creación de dos scripts para automatizar el proceso de creación de base y colecciones.  El primer script ejecutará los dos comandos necesarios para crear la base y colección de recibir los parámetros necesarios para crear lo requerido.  Veamos el código del script:

# Principio del script SiteCreation.ps1-----

# Los parametros a recibir

param (
     [string]$WebApplication = "$(Read-Host 'Enter the Url [e.g.http://hostname]')"
     ,[string]$ManagedPath = "$(Read-Host 'Enter the Managed Path [e.g. /sites/]')"
     ,[string]$SiteName = "$(Read-Host 'Enter the Site Name [e.g. sales]')"
     ,[string]$Title = "$(Read-Host 'Enter the Site Title [e.g. Control of Sales]')"
     ,[string]$PrimaryOwner = "$(Read-Host 'Enter the Primary Owner [e.g. domainname\username]')"
     ,[string]$SecondaryOwner = "$(Read-Host 'Enter the Secondary Owner [e.g. domianname\username]')"
 
)

# La función que ejecutará la creación de bases y colecciones
function main()
{

    # Valida si esta cargado el Snapin de SharePoint
    $snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
    if ($snapin -eq $null)
    {
      Write-Verbose "Loading SharePoint Powershell Snapin"
      Add-PSSnapin "Microsoft.SharePoint.Powershell"
    }

   #  Valida si fueron enviado todos los parametros

    if ( $WebApplication -ne $null -and $ManagedPath -ne $null -and $SiteName -ne $null -and $PrimaryOwner -ne $null -and $SecondaryOwner -ne $null -and $Title -ne $null)
    {

      # Construye el nombre de la base de contenido con el parámetro $SiteName
     
  $DatabaseName = "WSS_Content_" + $SiteName
     

      # Construye la dirección URL con el formato
     
  $FullUrl = $WebApplication + $ManagedPath + $SiteName
     # Lenguaje de la colección de sitios
    
   $Language = 1033

        Write-Host $DatabaseName

        Write-Host $FullUrl

        # Crea la base de datos de contenido cuidando que no exceda el número deseado de colecciones de sitios que es de uno.

        New-SPContentDatabase -Name $DatabaseName -WebApplication $WebApplication -MaxSiteCount 1 -WarningSiteCount 0 | out-null
       # Crea la colección de sitios con la plantilla de sitio en blanco STS#1 en la base de datos de contenido arriba creada con el titulo del sitio $Title y definiendo los dueños primario y segundario   
        New-SPSite -Url $FullUrl -Template "STS#1" -ContentDatabase $DatabaseName -Name $Title  -owneralias $PrimaryOwner -SecondaryOwnerAlias $SecondaryOwner -Language $Language | out-null
    }
}


main

# Fin del Script ------

El segundo script ejecutará la colección de instrucciones para las diferentes aplicaciones, echémosle un vistazo:

#Inicio del Script BulkSiteCreation.ps1 ---

Start-Transcript c:\configuracion\bulksitecreation.log

.\sitecreation.ps1 -WebApplication https://miportal.midominio.com -ManagedPath /app/ -SiteName MICG -Title "Monitoreo de Indicadores Claves de Gestión" -PrimaryOwner midomio\miusuario -SecondaryOwner midominio\otrousuario
.\sitecreation.ps1 -WebApplication https://miportal.midominio.com -ManagedPath /app/ -SiteName CHGPWD -Title "Cambio de Contraseñas" -PrimaryOwner infowareguate\spadmin -SecondaryOwner midominio\otrousuario
.\sitecreation.ps1 -WebApplication https://miportal.midominio.com -ManagedPath /app/ -SiteName AUTOFORMS -Title "Automatización de Formularios" -PrimaryOwner midomio\miusuario -SecondaryOwner midominio\otrousuario
.\sitecreation.ps1 -WebApplication https://miportal.midominio.com -ManagedPath /app/ -SiteName PortalCorp -Title "Porta Corporativo" -PrimaryOwner midomio\miusuario -SecondaryOwner midominio\otrousuario
.\sitecreation.ps1 -WebApplication https://miportal.midominio.com -ManagedPath /app/ -SiteName RRHH -Title "Portal de Recursos Humanos" -PrimaryOwner midomio\miusuario -SecondaryOwner midominio\otrousuario
.\sitecreation.ps1 -WebApplication https://miportal.midominio.com -ManagedPath /app/ -SiteName Reuniones -Title "Gestión de Reuniones" -PrimaryOwner midomio\miusuario -SecondaryOwner midominio\otrousuario

Stop-Transcript

#Fin del Script BulkSiteCreation.ps1

Nota:  Este proceso consume recursos del servidor, por lo que es recomendado ejecutarlo en un horario inhábil o bien programar la tarea para que se ejecute de noche una sola vez.

En este artículo vimos primero la importancia de planificar la distribución del contenido a través de la creación de base de datos de contenido y sus colecciones de sitios  para no impactar el rendimiento y mantener la maniobrabilidad en el respaldo y recuperación del contenido adecuados conociendo de antemano los límites y fronteras recomendadas por Microsoft para la plataforma de SharePoint.

 

SharePoint4Fun!,

Juan Manuel Herrera Ocheita

No hay comentarios.: