SharePoint 2007/2010/2013 : Export WSP infos to a csv file and a SharePoint list
Introduction
This article is related to a PowerShell script recently published on the TechNet Gallery. You can find it here: SharePoint 2007/2010/2013 : Export WSP infos to csv file and SharePoint list.
This PowerShell script gathers data associated with your SharePoint farm solutions (WSP) and export them to a CSV file and a SharePoint list.
It has been tested on SharePoint 2007, SharePoint 2010 and SharePoint 2013.
The exported data are the following:
- DisplayName
- Deployed
- ContainsCasPolicy
- ContainsGlobalAssembly
- ContainsWebApplicationResource
- DeployedServers
- DeployedWebApplications
- DeploymentState
- LastOperationDetails
- Status
We will not copy the full script content here (216 lines), but just explain the major steps:
- Browse the farm solutions (WSP)
- Build the structure containing the data
- Create a SharePoint list
- Configure the list
- Export the data to the CSV file
- Export the data to the SharePoint list
- Launch a browser to view the list
Step 1 : Browse farm solutions (WSP)
Get the farm (we used reflection to remain compatible with SharePoint 2007), and browse solutions using its "Solutions" property.
# Get farm[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")$farm=[Microsoft.SharePoint.Administration.SPFarm]::Local
# Get solutionsforeach ($solution in $farm.Solutions){ # Fill the data ...
Step 2 : Build the structure containing the data
Create an object and add all members, corresponding to all WSP properties to export.
# Build structure$itemStructure = New-Object psobject $itemStructure | Add-Member -MemberType NoteProperty -Name "DisplayName" -value "" $itemStructure | Add-Member -MemberType NoteProperty -Name "Deployed" -value ""$itemStructure | Add-Member -MemberType NoteProperty -Name "ContainsCasPolicy" -value "" $itemStructure | Add-Member -MemberType NoteProperty -Name "ContainsGlobalAssembly" -value "" $itemStructure | Add-Member -MemberType NoteProperty -Name "ContainsWebApplicationResource" -value "" $itemStructure | Add-Member -MemberType NoteProperty -Name "DeployedServers" -value ""$itemStructure | Add-Member -MemberType NoteProperty -Name "DeployedWebApplications" -value "" $itemStructure | Add-Member -MemberType NoteProperty -Name "DeploymentState" -value "" $itemStructure | Add-Member -MemberType NoteProperty -Name "LastOperationDetails" -value "" $itemStructure | Add-Member -MemberType NoteProperty -Name "Status" -value ""
Step 3 : Create a SharePoint list
A dedicated function will create the list:
- Gets the SPWeb corresponding to the site URL parameter
- Gets the list template (Generic List)
- Try to get the list. If found, the list is deleted, then recreated using the "Generic List" list template
function CreateSharePointlist{ # Get SPWeb try {$currentWeb = (New-Object Microsoft.SharePoint.SPSite($siteUrl)).OpenWeb()} catch { Write-Warning "The site '$siteUrl' cannot be found; the data will only be exported to the csv file." return } # Get list template (Generic template) $listTemplate = [Microsoft.SharePoint.SPListTemplateType]::GenericList # Try to get list $global:exportList = $currentWeb.Lists[$listName] # Delete list if necessary if($global:exportList -ne $null) {$global:exportList.Delete()} # Create list $listId = $currentWeb.Lists.Add($listName,$listDescription,$listTemplate) # Get list $global:exportList = $currentWeb.Lists[$listName]
Step 4 : Configure the list
A dedicated function will create the columns added to the list.
The function presented at the previous step:
- Adds all columns to the list
- Gets the default view
- Adds the columns corresponding to the data to the view and removes the "Attachments" column
- Updates the view
function AddColumn($fieldType, $fieldLabel, $fieldRequired){ # Add column $SPFieldType = [Microsoft.SharePoint.SPFieldType]::$fieldType $exportList.Fields.Add($fieldLabel,$SPFieldType,$fieldRequired)}function CreateSharePointlist{ ... # Add columns $dump = AddColumn -fieldType "Boolean" -fieldLabel "Deployed" -fieldRequired $false $dump = AddColumn -fieldType "Boolean" -fieldLabel "ContainsCasPolicy" -fieldRequired $false $dump = AddColumn -fieldType "Boolean" -fieldLabel "ContainsGlobalAssembly" -fieldRequired $false $dump = AddColumn -fieldType "Boolean" -fieldLabel "ContainsWebApplicationResource" -fieldRequired $false $dump = AddColumn -fieldType "Note" -fieldLabel "DeployedServers" -fieldRequired $false $dump = AddColumn -fieldType "Note" -fieldLabel "DeployedWebApplications" -fieldRequired $false $dump = AddColumn -fieldType "Text" -fieldLabel "DeploymentState" -fieldRequired $false $dump = AddColumn -fieldType "Note" -fieldLabel "LastOperationDetails" -fieldRequired $false $dump = AddColumn -fieldType "Text" -fieldLabel "Status" -fieldRequired $false # Update list $global:exportList.Update() # Get default view $view = $global:exportList.Views[0] # Add / delete columns from the view try{$view.ViewFields.delete("Attachments")} catch{} $view.ViewFields.add("Deployed") $view.ViewFields.add("ContainsCasPolicy") $view.ViewFields.add("ContainsGlobalAssembly") $view.ViewFields.add("ContainsWebApplicationResource") $view.ViewFields.add("DeployedServers") $view.ViewFields.add("DeployedWebApplications") $view.ViewFields.add("DeploymentState") $view.ViewFields.add("LastOperationDetails") $view.ViewFields.add("Status") # Update default view $view.Update()
Step 5 : Export the data to the csv file
For each solution, a variable named "solutionsList" is filled with a structure item. At the end, it is exported to the CSV file.
# Local variables$solutionsList = $null$solutionsList = @()# Get solutionsforeach ($solution in $farm.Solutions){ $solutionInfos = $itemStructure | Select-Object *; $solutionInfos.DisplayName = $solution.DisplayName; $solutionInfos.Deployed = $solution.Deployed; $solutionInfos.ContainsCasPolicy = $solution.ContainsCasPolicy; ... $solutionsList += $solutionInfos;}# Export$solutionsList | Where-Object {$_} | Export-Csv -Delimiter "$delimiter" -Path "$exportPath\$fileName.csv" -notype;
Step 6 : Export the data to the SharePoint list
In the same part of the code seen in the previous step (we removed the code associated to the CSV file), create a new item (SPItem) for each solution found, and fill its properties.
Update the item at the end.
# Get solutionsforeach ($solution in $farm.Solutions){ ... if ($exportToSharePoint) { # Create SPItem $newItem = $global:exportList.Items.Add() } if ($exportToSharePoint) { $titleField = $global:exportList.Fields | where {$_.internalname -eq "LinkTitle"} $newItem[$titleField] = $solution.DisplayName } if ($exportToSharePoint) {$newItem["Deployed"] = $solution.Deployed} if ($exportToSharePoint) {$newItem["ContainsCasPolicy"] = $solution.ContainsCasPolicy} $serverIndex = 0 foreach ($server in $solution.DeployedServers) { $solutionInfos.DeployedServers += $solution.DeployedServers[$serverIndex].Name +"`n"; $serverIndex++; } ... if ($exportToSharePoint) { # Update SPItem $newItem.Update() }}
Step 7 : Launch a browser to view the list
At the end of the script, a browser is launched to display the list contents.
if ($exportToSharePoint){ write-host "The data have been copied in the SharePoint list." -foreground "green" $ie = New-Object -ComObject InternetExplorer.Application $ie.Navigate("$siteUrl/Lists/$listName/AllItems.aspx") try{$ie.Visible = $true} catch{}}
Results
1. Script launched with all parameters:
http://i1.gallery.technet.s-msft.com/sharepoint-200720102013-3291f5ee/image/file/100294/1/7.png
- SharePoint list content:
http://i1.gallery.technet.s-msft.com/sharepoint-200720102013-3291f5ee/image/file/100287/1/1.png
References
- TechNet gallery : SharePoint 2007/2010/2013 : Export WSP infos to csv file and SharePoint list.
Other languages
This article is also available in the following languages: