SharePoint 2013: Como extraer todos los WSPs del contenedor global de soluciones con PowerShell!

En ocasiones, puede ser que nos encontremos con una situación en la que no tenemos los WSPs desplegados originalmente en una granja de SharePoint. Por suerte, a través del modelo de objetos de SharePoint nos las podemos ingeniar para extraer estos WSPs tanto en un pequeño programilla creado en Visual Studio como en un script PowerShell. En este caso, os dejo el script PowerShell que os permite extraer esos WSPs. Como veis, la mecánica es muy sencilla:

  • Con el cmdlet Get-SPSolution accedemos al conjunto de soluciones de tipo granja de nuestro despliegue SharePoint.
  • A continuación, para cada solución obtenemos el archivo de solución y lo guardamos en la ruta actual.
   1: ############################################################################################################################################

   2: # Script que extrae todos los WSPs de la granja

   3: # Parámetros necesarios: N/A

   4: ############################################################################################################################################

   5:  

   6:  

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

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

   9:  

  10: #Hacemos un buen uso de PowerShell para no penalizar el rendimiento

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

  12:  

  13: #Función que permite extraer todos los WSPs del contenedor global de soluciones de SharePoint

  14: function GetAllWSPs

  15: {    

  16:     write-host "Iniciada la extracción de los WSPs del contenedor global de la granja Granja ...." -foregroundcolor yellow 

  17:     try

  18:     {

  19:         $spSolutions = Get-SPSolution        

  20:         foreach($spSolution in $spSolutions) 

  21:         {             

  22:             Write-Host "Extrayendo la solución $spSolution" -ForegroundColor Yellow

  23:             $spSolutionFile=$spSolution.SolutionFile            

  24:             $spSolutionFile.SaveAs($ScriptDir  + "\" + $spSolution.DisplayName)

  25:         } 

  26:     }

  27:     catch [System.Exception]

  28:     {

  29:         write-host -f red $_.Exception.ToString()

  30:     }

  31: } 

  32:  

  33: Start-SPAssignment –Global

  34: $ScriptDir = Split-Path -parent $MyInvocation.MyCommand.Path

  35: GetAllWSPs

  36: Stop-SPAssignment –Global

  37: Remove-PsSnapin Microsoft.SharePoint.PowerShell

  • Y el resultado es el siguiente:

image