SharePoint 2013: Script para automatizar la instalación de una solución!

En esta ocasión os dejo un script que automatiza la instalación de una solución para SharePoint 2013 detectando si la misma existe para desinstalarla y borrarla. Así mismo, el script permite determinar si la solución tiene recursos en el ámbito de aplicación web o no a la hora de hacer el despliegue. Espero que os sea de utilidad:

   1: If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) 

   2: { Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }

   3:  

   4: #Hacemos un buen uso de PowerShell par ano penalizar el rendimiento

   5: $host.Runspace.ThreadOptions = "ReuseThread"

   6: function WaitForJobToFinish([string]$sSolutionName)

   7: { 

   8:     $JobName = "*solution-deployment*$sSolutionName*"

   9:     $job = Get-SPTimerJob | ?{ $_.Name -like $JobName }

  10:     if ($job -eq $null) 

  11:     {

  12:         Write-Host 'Timer job no encontrado'

  13:     }

  14:     else

  15:     {

  16:         $JobFullName = $job.Name

  17:         Write-Host -NoNewLine "Esperando a que finalice el Timer Job $JobFullName"

  18:         

  19:         while ((Get-SPTimerJob $JobFullName) -ne $null) 

  20:         {

  21:             Write-Host -NoNewLine .

  22:             Start-Sleep -Seconds 2

  23:         }

  24:         Write-Host  "Finalizada la espera para el Timer Job.."

  25:     }

  26: }

  27:  

  28: #Función que comprueba si la solución existe

  29: function CheckSolutionExist([string] $sSolutionName)

  30: {

  31:     $spFarm = Get-SPFarm

  32:     $spSolutions = $spFarm.Solutions

  33:     $bExists = $false

  34:  

  35:     foreach ($spSolution in $spSolutions)

  36:     {

  37:         if ($spSolution.Name -eq $sSolutionName)

  38:         {

  39:             $bExists = $true

  40:             return $bExists

  41:             break

  42:         }

  43:     }

  44:     return $bExists

  45: }

  46:  

  47: #Función que desinstala la solución

  48: function UninstallRemoveSolution([string] $sSolutionName, [string] $sWebAppUrl)

  49: {

  50:     $sSolution=Get-SPSolution $sSolutionName

  51:     Write-Host 'Desinstalando la solución $sSolutionName'

  52:     if ( $sSolution.ContainsWebApplicationResource ) {

  53:         Uninstall-SPSolution -Identity $sSolutionName -Confirm:$false -Webapplication $sWebAppUrl        

  54:     }

  55:     else {

  56:         Uninstall-SPSolution -Identity $sSolutionName -Confirm:$false

  57:     }

  58:     Write-Host 'Esperando a que finalice el Timer Job'

  59:     WaitForJobToFinish 

  60:     

  61:     Write-Host 'Eliminando la solución $solutionName'

  62:  

  63:     Remove-SPSolution -identity $sSolutionName -confirm:$false

  64:  

  65: }

  66:  

  67: #Función que instala la solución

  68: function AddInstallSolution([string] $sSolutionName, [string] $sSolutionPath, [string] $sWebAppUrl)

  69: {

  70:     Write-Host 'Añadiendo la solución $sSolutionName'

  71:     $sSolution=Add-SPSolution $sSolutionPath

  72:     

  73:     if ( $sSolution.ContainsWebApplicationResource ) {

  74:         Install-SPSolution –identity $sSolutionName –GACDeployment -WebApplication $sWebAppUrl     

  75:     }

  76:     else {

  77:         Install-SPSolution –identity $sSolutionName –GACDeployment -Force

  78:     }

  79:     Write-Host 'Esperando a que finalice el Timer Job' 

  80:     WaitForJobToFinish 

  81:  

  82: }

  83:  

  84: $sCurrentDir=Split-Path -parent $MyInvocation.MyCommand.Path

  85: $sSolutionName="<NombreSolution>.wsp"

  86: $sWebAppUrl="http://<UrlWebApp>"

  87: $sSolutionPath=$sCurrentDir + "\"+$sSolutionName 

  88:  

  89: #Proceso para instalar la solución

  90: $bSolutionFound=CheckSolutionExist -sSolutionName $sSolutionName

  91:  

  92: if($bSolutionFound)

  93: {

  94:     Write-Host "La solución $sSolutionName existe en la granja"

  95:     UninstallRemoveSolution -sSolutionName $sSolutionName -sWebAppUrl $sWebAppUrl

  96: }

  97:  

  98: AddInstallSolution -sSolutionName $sSolutionName -sSolutionPath $sSolutionPath -sWebAppUrl $sWebAppUrl

  99:  

 100:  

 101: Remove-PsSnapin Microsoft.SharePoint.PowerShell

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s