Desplegar una plantilla personalizada en sharepoint con powershell
Siguiendo la estela del post, convertir un sitio de sharepoint en plantilla. Vamos a realizar un script de powershell, en el cual vamos a desplegar esa plantilla creada.
El script es sencillo lo explico:
En la parte de variables debemos rellenar las variables con xxx.
hostHeader = nombre que hemos definido en el dns para el sitio
appPool = nombre del pool de iis
appPoolAccount = usuario y password para ese pool de iis
dbServer = nombre del servidor de bbdd
dbName = nombre de la bbdd que va a crear en nuestro servidor
appName = nombre que queremos darle a nuestra sitio dentro de sharepoint
siteName = titulo de nuestro de sitio de sharepoint
ownerAlias = usuario y password para propietario del sitio
En la parte de crear la aplicación web creara nuestro sitio de sharepoint así como la colección de sitio. Después de crear el sitio totalmente en blanco vamos a asignar los propietarios, yo he creado una función para asignar tanto como necesitemos.
Una vez hecho esto, vamos a asignarle la plantilla de sharepoint que creamos en el otro post. Para ello, primero a subiremos a la galería y Comprobara si el sitio tiene la característica de publicación activada y si no la activara.
Una vez hecho todo esto, activara la plantilla. El siguiente paso, es buscarla y aplicarla al sitio.
Como veis, es sencillo de entender y os puedo asegurar que muy útil si vas a generar muchos sitio en sharepoint. Como una estética parecida, o como puede ser un logo colocado en el mi sitio, o una misma estructura, o mismas fotos.
Os dejo el script completo:
Write-Output "Inicio: $(Get-Date)" #variables $hostHeader="xxx.xxxx.xxx" $appPool="xxxxxx_ServiceAppPool" $appPoolAccount="xxxx\xxxxx" $dbServer="xxxxx.xxxxx.xxx" $dbName="WSS_Content_xxxxxxx" $appName="xxxxxxx" $siteName="xxxxx" $ownerAlias="xxxx\xxxxxx" $rootUrl = "http://"+$hostHeader $ap = New-SPAuthenticationProvider #funcion para aplicar permisos a nivel de web app function appwebpolicy($web,$user,$displayName){ Get-SPWebApplication $web | foreach { $webApp = $_ $policy = $webApp.Policies.Add($user, $displayName) $policyRole = $webApp.PolicyRoles.GetSpecialRole([Microsoft.SharePoint.Administration.SPPolicyRoleType]::FullControl) $policy.PolicyRoleBindings.Add($policyRole) $webApp.Update() } } #crear la aplicacion web New-SPWebApplication -Name $appName -Port 80 -HostHeader $hostHeader -URL $rootUrl -ApplicationPool $appPool -ApplicationPoolAccount (Get-SPManagedAccount $appPoolAccount) -AuthenticationProvider $ap -DatabaseName $dbName -DatabaseServer $dbServer #crear coleccion de sitio New-SPSite $rootUrl -OwnerAlias $ownerAlias -ContentDatabase $dbName -Name $siteName #$webApp = Get-SPWebApplication $rootUrl #$webApp.ProvisionGlobally() Write-Output "asignar permisos" #usamos la funcion para asignar permisos en la web app appwebpolicy $rootUrl "i:0#.w|xxxx\xxxxx" "xxxx xxxx" appwebpolicy $rootUrl "i:0#.w|xxxx\xxxxx" "xxxx xxxx xxxx" appwebpolicy $rootUrl "i:0#.w|xxxx\xxxxx" "xxxx xxxx xxxx" Write-Output "añadir plantilla" #añadimos la plantilla a la solution gallery de la coleccion Add-SPUserSolution -LiteralPath "C:\plantilla\plantilla_colaborativa.wsp" -Site $rootUrl #activar feature de publicacion del sitio Enable-SPFeature -Identity "F6924D36-2FA8-4f0b-B16D-06B7250180FA" -Url $rootUrl #activamos la plantilla Install-SPUserSolution -Identity plantilla_colaborativa.wsp -Site $rootUrl Write-Output "aplicar plantilla" #definimos variables para aplicar la plantilla $site= new-Object Microsoft.SharePoint.SPSite($rootUrl) $loc= [System.Int32]::Parse(1033) $templates= $site.GetWebTemplates($loc) #busca la plantilla foreach ($child in $templates) { if ($child.title -eq "plantilla colaborativa") { write-host $child.Name "" $child.Title $mytemplate=$child } } #aplicamos al plantilla solitada $web = GET-SPWeb $rootUrl $web.ApplyWebTemplate($mytemplate) Write-Output "Fin: $(Get-Date)"
Espero que os sirva.