This script installs or reinstalls Sharepoint 2010 feature package.

 

It has two parameters:

 

It is easy to use and automatic, I am using it for about 4 months without any problems.

I am using only one feature per solution package.

 

Example:

.\FeatureUpdate.ps1 http://sps "C:\StructureDefinition.wsp"

 

 

 

PowerShell
Edit|Remove
param([string]$url = $(Throw "Parameter missing: -url Sharepoint site URL"), [string]$solutionPath = $(Throw "Parameter missing: -solutionPath Path to *.wsp file")) 
 
$solutionNameSplit-Path $solutionPath -leaf 
Start-Service 'SPAdminV4' 
 
function WaitForJobToFinish([string]$SolutionFileName) 
{ 
    $JobName = "*solution-deployment*$SolutionFileName*" 
    $job = Get-SPTimerJob | ?{ $_.Name -like $JobName } 
    if ($job -eq $null) 
    { 
        Write-Host  -ForegroundColor Red 'Timer job not found' 
    } 
    else 
    { 
        $JobFullName = $job.Name 
        Write-Host -NoNewLine "Waiting to finish job $JobFullName" 
        
        while ((Get-SPTimerJob $JobFullName-ne $null) 
        { 
            Write-Host -NoNewLine . 
            Start-Sleep -Seconds 2 
        } 
        Write-Host -ForegroundColor Green "Finished waiting for job.." 
    } 
} 
 
#Install or Reinstal?? 
 
Write-Host 'Looking for solution...' 
$solution = Get-SPSolution | where {$_.Name -eq $solutionNameif($solution -ne $null) 
{ 
     Write-Host -ForegroundColor Green 'SolutionName: ' $solution.Name   
     Write-Host 'Looking for solution...'                        
     $feature = Get-SPFeature | where {$_.SolutionID -eq $solution.ID} 
     if($feature -ne $null) 
     { 
          Write-Host -ForegroundColor Green 'FeatureName: ' $feature.DisplayName   
          Write-Host 'Trying to disable feature...'                        
 
          try 
          { 
                   Disable-spfeature -identity $feature.DisplayName -confirm:$false -url $url -ErrorAction Stop 
                Write-Host -ForegroundColor Green 'Feature was disabled'  
          } 
          catch [System.Exception] 
          { 
                   if($_.Exception.Message -like '*is not activated at this scope*') 
                   { 
                    Write-Host 'Feature was not active'   
                   } 
                   else 
                   { 
                       throw 
                   } 
          } 
 
          Write-Host 'Trying to uninstall feature...'                        
          Uninstall-SPFeature -Identity $feature.DisplayName -confirm:$false 
          Write-Host -ForegroundColor Green 'Feature was uninstalled' 
 
     } 
     else 
     { 
          Write-Host -ForegroundColor Green 'Not found'   
     } 
 
     Write-Host 'Trying to uninstall solution...' 
 
     if ($solution.ContainsWebApplicationResource )  
     { 
          Uninstall-SPSolution -identity $solutionName  -allwebapplications -confirm:$false 
     } 
     else 
     { 
          Uninstall-SPSolution -identity $solutionName -confirm:$false 
     } 
 
     WaitForJobToFinish $solutionName 
     Write-Host -ForegroundColor Green 'Solution was uninstalled' 
 
     Write-Host 'Trying to remove solution...'                        
     Remove-SPSolution –Identity $solutionName -confirm:$false 
     Write-Host -ForegroundColor Green 'Solution was removed' 
} 
else 
{ 
     Write-Host -ForegroundColor Green 'Solution not found'  
} 
 
Write-Host 'Going to add solution' 
$solution = Add-SPSolution $SolutionPath 
Write-Host -ForegroundColor Green 'Solution added' 
 
Write-Host 'Going to install solution to all web applications' 
 
if ($solution.ContainsWebApplicationResource )  
{ 
     Install-SPSolution –Identity $solution.Name –Allwebapplications –GACDeployment 
} 
else 
{ 
     Install-SPSolution –Identity $solution.Name –GACDeployment 
} 
 
Write-Host -ForegroundColor Green 'Solution installed' 
 
Write-Host 'Waiting for job to finish' 
WaitForJobToFinish $solutionName 
 
$feature = Get-SPFeature | where {$_.SolutionID -eq $solution.ID} 
Write-Host 'Going to enable Feature' 
Enable-spfeature -identity $feature.DisplayName -url $url -confirm:$false 
Write-Host -ForegroundColor Green 'Feature enabled'