cchitsiang
11/12/2013 - 9:45 AM

From http://social.technet.microsoft.com/Forums/en-US/9cc5b5c6-e728-4f48-af6c-00cf8be3d4ba/powershell-script-to-retract-remove-all-farm-solu

cd /c %~dp0
powershell -noexit -file "installwsp.ps1" "%CD%"
pause
Add-PsSnapin Microsoft.SharePoint.PowerShell
 
#Do not modify anything in the script from here onwards
 function Get-ScriptDirectory
 {
  $Invocation = (Get-Variable MyInvocation -Scope 1).Value
  Split-Path $Invocation.MyCommand.Path
 }
 
function Deploy-Solution{
 param(
 [string]$physicalPath,
 [string]$name)
 
$SolutionName = $name
 $SolutionPath = Join-Path ($physicalPath) $SolutionName
 echo "Extracting information from $physicalPath"
 
#Admin service
 $AdminServiceName = "SPAdminV4"
 $IsAdminServiceWasRunning = $true;
 
if ($(Get-Service $AdminServiceName).Status -eq "Stopped")
 {
     $IsAdminServiceWasRunning = $false;
     Start-Service $AdminServiceName
    Write-Host 'SERVICE WAS STOPPED, SO IT IS NOW STARTED'
 }
 
#Uninstall
 Write-Host 'UNINSTALLING SOLUTION ...'
 
$Solution = Get-SPSolution | ? {($_.Name -eq $SolutionName) -and ($_.Deployed -eq $true)}
 
if ($Solution -ne $null)
 {
     if($Solution.ContainsWebApplicationResource)
     {
         Uninstall-SPSolution $SolutionName -AllWebApplications -Confirm:$false
     }
     else
     {
         Uninstall-SPSolution $SolutionName -Confirm:$false
     }
 }
 
while ($Solution.JobExists)
 {
     Start-Sleep 2
 }
 
Write-Host 'SOLUTION HAS BEEN UNINSTALLED SUCCESSFULLY.'
 
Write-Host 'REMOVING SOLUTION ...'
 
if ($(Get-SPSolution | ? {$_.Name -eq $SolutionName}).Deployed -eq $false)
 {
     Remove-SPSolution $SolutionName -Confirm:$false
 
Write-Host 'SOLUTION HAS BEEN REMOVED SUCCESSFULLY.'
 }
 
Write-Host 'ADDING SOLUTION ...'
 
Add-SPSolution $SolutionPath  | Out-Null
 
Write-Host 'SOLUTION HAS BEEN ADDED SUCCESSFULLY.'
 
Write-Host 'DEPLOYING SOLUTION ...'
 
$Solution = Get-SPSolution | ? {($_.Name -eq $SolutionName) -and ($_.Deployed -eq $false)}
 
#use '-force' paramater to install all commands in this if statement
 
if(($Solution -ne $null) -and ($Solution.ContainsWebApplicationResource))
 {
 Install-SPSolution $SolutionName –AllwebApplications -GACDeployment -Force -Confirm:$false
 }
 else
 {
 Install-SPSolution $SolutionName -GACDeployment -Force -Confirm:$false
 }
 
while ($Solution.Deployed -eq $false)
 {
     Start-Sleep 2
 }
 
Write-Host 'SOLUTION HAS BEEN DEPLOYED SUCCESSFULLY.'
 
if (-not $IsAdminServiceWasRunning)
 {
     Stop-Service $AdminServiceName
 }
 }
 
#Get Current Physical Path
 $currentPhysicalPath = Get-ScriptDirectory
 
#Iterate through all .wsp files in the current Physical Path to deploy solution
 get-childitem $currentPhysicalPath -include *.wsp -recurse | foreach ($_) {Deploy-Solution $currentPhysicalPath $_.name}
 
#Remove SharePoint Snapin
 Remove-PsSnapin Microsoft.SharePoint.PowerShell
 
Echo Finish