SharePoint PowerShell : Remove Missing Features From Content Database

  1. function Remove-SPFeatureFromContentDB($ContentDb, $FeatureId, [switch]$ReportOnly)  
  2. {  
  3.     $db = Get-SPDatabase | where { $_.Name -eq $ContentDb }  
  4.     [bool]$report = $false  
  5.     if ($ReportOnly) { $report = $true }  
  6.       
  7.     $db.Sites | ForEach-Object {  
  8.           
  9.         Remove-SPFeature -obj $_ -objName "site collection" -featId $FeatureId -report $report  
  10.                   
  11.         $_ | Get-SPWeb -Limit all | ForEach-Object {  
  12.               
  13.             Remove-SPFeature -obj $_ -objName "site" -featId $FeatureId -report $report  
  14.         }  
  15.     }  
  16. }  
  17.   
  18. function Remove-SPFeature($obj, $objName, $featId, [bool]$report)  
  19. {  
  20.     $feature = $obj.Features[$featId]  
  21.       
  22.     if ($feature -ne $null) {  
  23.         if ($report) {  
  24.             write-host "Feature found in" $objName ":" $obj.Url -foregroundcolor Red  
  25.         }  
  26.         else  
  27.         {  
  28.             try {  
  29.                 $obj.Features.Remove($feature.DefinitionId, $true)  
  30.                 write-host "Feature successfully removed from" $objName ":" $obj.Url -foregroundcolor Red  
  31.             }  
  32.             catch {  
  33.                 write-host "There has been an error trying to remove the feature:" $_  
  34.             }  
  35.         }  
  36.     }  
  37.     else {  
  38.         write-host "Feature ID specified does not exist in" $objName ":" $obj.Url  
  39.     }  
  40. }  
  41.   
  42. $contentDatabaseName = Read-Host "Enter the Content Datbase name:"  
  43. $featureId = Read-Host "Enter the feature Id :"  
  44.   
  45. Remove-SPFeatureFromContentDB -ContentDB $contentDatabaseName -FeatureId $featureId –ReportOnly