How to Get the List of WSPs (Solutions) Installed in a SharePoint Farm using PowerShell


Sathish Nadarajan
SharePoint MVP
Published On :   16 May 2016
Visit Count
Today :  3    Total :   4470
Plan, Migrate, Secure, Report
SharePoint & Office 365 Tool. Simple & Easy to Use. 15-Day Trial!

Sharegate: Kick-Ass Tool
Think Your SharePoint & Office 365 Are Secure ? Find Out Now!


As Part of an analysis, I wanted the List of WSPs installed in my SharePoint farm. To get that, I was about to write a small function in PowerShell Script. The function is as follows.

 #############  Get All The Solutions in the Farm and their deployed WebApplications ############ 
 
 function GetSolution()
 {
     $script:Progress = "1,Entered"
     Write-Host "Entered into GetSolution Method" -ForegroundColor Yellow 
     Add-Content "$ProgressFile" "Entered into GetSolution Method"
     
     # Assign the CSV and XML Output File Paths
     $Solution_XML_Path = $scriptBase + "\Reports-$LogTime\AvailableSolutions.xml"
     
     # Create the XML File Tags
     $xmlWriter = New-Object System.XMl.XmlTextWriter($Solution_XML_Path,$Null)
     $xmlWriter.Formatting = 'Indented'
     $xmlWriter.Indentation = 1
     $XmlWriter.IndentChar = "`t"
     $xmlWriter.WriteStartDocument()
     $xmlWriter.WriteComment('Solutions List')
     $xmlWriter.WriteStartElement('Solutions')
     $xmlWriter.WriteEndElement()
     $xmlWriter.WriteEndDocument()
     $xmlWriter.Flush()
     $xmlWriter.Close()
  
     
     # Get All the Solutions
     Add-Content "$ProgressFile" "Gathering All the Solutions from the Farm"
     
     $SolutionCollection = $farm.Solutions
     
     Add-Content "$ProgressFile" "Gathered All the Solutions from the Farm"
     
     if($SolutionCollection.Count -gt 0)
     {
         # Iterate through all the Solutions
         foreach($Solution in $SolutionCollection)
         {
             $tempContent = "Collecting the Information about the Solution : " + $Solution.DisplayName
             Add-Content "$ProgressFile" $tempContent
             
             # Get the deployed web applications
             $SPDeployedWebApps = $Solution.DeployedWebApplications
             
             # Create the Initial Solution Node
             $xmlDoc = [System.Xml.XmlDocument](Get-Content $Solution_XML_Path);
             $solutionNode = $xmlDoc.CreateElement("Solution")
             $xmlDoc.SelectSingleNode("//Solutions").AppendChild($solutionNode)
             $solutionNode.SetAttribute("Name", $Solution.DisplayName)
             
             Add-Content "$ProgressFile" "Iterate through the Installed Web Applications"
             # Iterate through all the Deployed Web Applications
             foreach($WebApplication in $SPDeployedWebApps)
             {
                 # write the output on XML File
                 
                 $webAppNameNode = $solutionNode.AppendChild($xmlDoc.CreateElement("WebApplication"));
                 $webAppNameNode.SetAttribute("Name", $WebApplication.DisplayName)
                 
                 $webAppURLNode = $webAppNameNode.AppendChild($xmlDoc.CreateElement("URL"));
                 $webAppURLTextNode = $webAppURLNode.AppendChild($xmlDoc.CreateTextNode($WebApplication.Url));
                 
                 $webAppDeploymentStateNode = $webAppNameNode.AppendChild($xmlDoc.CreateElement("Deployed"));
                 $webAppDeploymentStateTextNode = $webAppDeploymentStateNode.AppendChild($xmlDoc.CreateTextNode($Solution.DeploymentState));
                 
                 $xmlDoc.Save($Solution_XML_Path) 
             }
         }
      }
      
      Write-Host "Completed GetSolution Method" -ForegroundColor Green 
      Add-Content "$ProgressFile" "Completed GetSolution Method"
      $script:Progress = "1:Success"
      
      Write-Host "Please Find the Output XML file in the Path :" $Solution_XML_Path  -ForegroundColor Green 
 }
 
 ########### End of Method #################
 

Happy Coding,

Sathish Nadarajan.

SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.
Categories

Protect Your SharePoint