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