Detailed SharePoint Report

Corey Whitney 0 Reputation points
2024-05-14T19:01:47.85+00:00

Does anyone know how to get a detailed report on usage and features that are being used and not used for our intranet page?

SharePoint
SharePoint
A group of Microsoft Products and technologies used for sharing and managing content, knowledge, and applications.
9,886 questions
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. Emily Du-MSFT 42,596 Reputation points Microsoft Vendor
    2024-05-15T10:13:08.3933333+00:00

    1.Please refer below article to get a detailed report on usage in a site collection.

    https://learn.microsoft.com/en-us/sharepoint/administration/view-usage-reports

    2.You could use below PowerShell to generate a report for all activate features.

    Add-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction SilentlyContinue
      
    #Get all Farm scoped features
    write-host "Farm scoped features:"
    Get-SPFeature -Farm
     
    #Process All Web Applications
     ForEach ($WebApp in Get-SPWebApplication)
     {
        write-host "`nProcessing Web Application:" $webapp.url 
        #Get All Web Application Scoped features
        Get-SPFeature -WebApplication $WebApp.url
     
        #Process each site collection
        foreach ($site in $WebApp.sites)
        {
          write-host "`tProcessing Site Collection: " $site.url
          #Get All Site collection Scoped features
          Get-SPFeature -Site $site.url
     
          #Process each site
          foreach ($web in $site.AllWebs)
          {
             write-host "`t`tProcessing Web: " $web.url
             #Get All Web scoped features
             Get-SPFeature -Web $web
          }
        }
     }
    

    3.You could use below PowerShell to generate a report for all inactive features.

    Add-PSSnapin "Microsoft.SharePoint.Powershell" -ErrorAction SilentlyContinue
     
    $InactiveFeatures = @()
     
    #Get All installed features on respective scopes
    $WebAppFeatures =  Get-SPFeature | Where-Object {$_.Scope -eq "WebApplication" }
    $siteFeatures = Get-SPFeature | Where-Object {$_.Scope -eq "Site" }
    $WebFeatures = Get-SPFeature| Where-Object {$_.Scope -eq "Web" }
     
    Write-host "Checking Web Application Scoped Features..."
    foreach ($WebAppFeature in $WebAppFeatures)
    {
           $Flag = $False
           foreach ($WebApp in Get-SPWebApplication)
           {
             if ((Get-SPFeature -WebApplication $WebApp.URL | Where-Object {$_.Id -eq $WebAppFeature.id}) -ne $null)
             {
                #We found that the Feature is active, Lets end up the loop
                $Flag = $True
                break
             }
          }
      if($Flag -eq $False)
      {
         Write-Host "$($WebFeature.DisplayName) is not Active on any Web Application!)"
      }  
    }
     
       Write-Host "`nChecking Site Collection Scoped Features..."
       foreach ($SiteFeature in $SiteFeatures)
       {
           $Flag = $False
           :WebAppLoop1 foreach ($WebApp in Get-SPWebApplication)
          {
          foreach($site in $WebApp.Sites)
          {
              if ((Get-SPFeature -Site $Site.URL | Where-Object {$_.Id -eq $SiteFeature.id}) -ne $null)
              {
                #We found that the Feature is active, Lets end up the loop
                $Flag = $True
                break WebAppLoop1
              }
          }
      }
       if($Flag -eq $False)
       {
          Write-Host "$($SiteFeature.DisplayName) is not Active on Any Site Collection!"
       }  
    }
     
     Write-host "`nChecking Web Scoped Feature..."
       foreach ($WebFeature in $WebFeatures)
       {
           $Flag = $False
        #I'm limiting to a single web application, Remove ""https://sharepoint.crescent.com" to process all WebApps
           :WebAppLoop2 foreach ($WebApp in Get-SPWebApplication "https://sharepoint.crescent.com")
           {
             foreach($Site in $WebApp.Sites)
             {
               foreach($Web in $Site.AllWebs)
               {
                if ((Get-SPFeature -Web $Web.URL | Where-Object {$_.Id -eq $WebFeature.id}) -ne $null)
                {
                  #We found that the Feature is active, Lets end up the loop
                  $Flag = $True
                  break WebAppLoop2
                }
              }
           }
         }
       if($Flag -eq $False)
       {
         Write-Host "$($WebFeature.DisplayName) is not Active on Any Web!"
       }  
     }
    

    If the answer is helpful, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".

    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.