Búsqueda de sitios web

Informe de uso de funciones de SharePoint mediante PowerShell


Tarea: Genere un informe para todas las funciones instaladas/activadas para todo el entorno de SharePoint. A continuación se muestran algunos scripts de PowerShell ingeniosos para encontrar funciones instaladas en la granja, así como funciones específicas activadas en un ámbito particular.

Cmdlet Get-SPFeature:
El cmdlet Get-SPFeature recupera todas las funciones instaladas en el entorno cuando no se proporciona el valor del parámetro "Scope". Obtiene todas las funciones activadas en el alcance particular, cuando proporciona el parámetro de alcance: (Tales como: -site “https://sharepointsite.com”)

Obtenga una lista de todas las funciones de SharePoint instaladas, agrupadas por alcance de funciones:


Get-SPFeature | Sort-Object Scope | Format-Table -GroupBy scope

Exportemos a un archivo de texto:


Get-SPFeature | Sort -Property Scope, DisplayName | Ft -Autosize -GroupBy Scope DisplayName, Id > D:\FeaturesReport.txt

Para activar todas las funciones en el ámbito de una aplicación web particular, utilice:


Get-SPFeature -WebApplication "web-app-url"
#Similarly:
#Get-SPFeature -Farm
#Get-SPFeature -Site $Site.URL
#Get-SPFeature -Web $web.URL

Obtenga todas las funciones junto con su título:


Get-SPFeature | Format-Table @{Label='ID';Expression={$_.Id}}, 
@{Label='DisplayName';Expression={$_.DisplayName}}, 
@{Label='Title';Expression={$_.GetTitle(1033)}}, 
@{Label='Scope';Expression={$_.Scope}} -AutoSize | Out-File -Width 250 
D:\AllFeatures.txt

Obtenga todos los mosaicos de funciones y descripciones, activados en una colección de sitios en particular:


Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

$siteurl = "https://sharepoint.crescent.com"

Get-SPFeature -Limit ALL -Site $siteurl | ForEach-Object {
  $data = @{ 
  Feature = $_.GetTitle(1033)
  Description = $_.GetDescription(1033)
 }
 New-Object PSObject -Property $data; 
} | Select-Object Feature, Description 

Buscar todas las funciones/específicas en SharePoint 2013/SharePoint 2010:
Busquemos y enumeremos dónde está activada una función.


Add-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction SilentlyContinue

$FeatureName = "TemplateDiscovery"
#We can also use "FeatureID" instead of Feature DisplayName 

# Get all Farm scoped features
#write-host "Farm scoped features:"
#Get-SPFeature -Farm 

# To Search for a specific Farm scoped feature:
Get-SPFeature -Farm | where { $_.DisplayName -eq $FeatureName } #Eg SpellChecking

 #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 

    # To Search for a specific WebApplication scoped feature:
    Get-SPFeature -WebApplication $WebApp.url | where { $_.DisplayName -eq $FeatureName }

    #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 

      # To Search for a specific Site Collection scoped feature:
      Get-SPFeature -Site $site.url | where { $_.DisplayName -eq $FeatureName }

      #Process each site
      foreach ($web in $site.AllWebs) 
      {
         write-host "`t`tProcessing Web: " $web.url 
         # Get All Web scoped features
         #Get-SPFeature -Web $web 

         # To Search for a specific Site Collection scoped feature:
         Get-SPFeature -Web $web | where { $_.DisplayName -eq $FeatureName }
       }
    }
 }

Inventario de funciones para SharePoint 2007 usando STSADM:
Stsadm -o enumallwebs -includefeature

Uso de PowerShell para buscar todas las funciones en MOSS 2007:
Este script obtiene todas las funciones activadas en el ámbito de la aplicación web, la colección de sitios y los ámbitos del sitio:


[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

Function global:Get-SPWebApplication($WebAppURL)
{
 return [Microsoft.SharePoint.Administration.SPWebApplication]::Lookup($WebAppURL)
}

  #Get the SharePoint Farm. Equallent to : Get-SPFarm commandlet
  $Farm = [Microsoft.SharePoint.Administration.SPFarm]::Local

  #Get All feature of the farm. Equallent to: Get-SPFeature commandlet
  $FarmFeatures= $Farm.FeatureDefinitions
  
  $WebAppURL = "https://SharePoint.Crescent.com"
  $WebApp = Get-SPWebApplication $WebAppURL
  
   #Scan Web Application Features
    Write-Host  "Features Activated at Web Application Level:"  -ForegroundColor DarkGreen

   foreach($feature in $WebApp.Features)
   {
      #Write-Host $feature.DefinitionId;
      Write-Host $farmfeatures[$feature.DefinitionId].DisplayName 
   }
  
  #Get All site collections of the Web Application  
  $SitesColl = $webApp.Sites  
  
  #Iterate through each site collection/sub-site
  foreach($Site in $SitesColl)
  {
   Write-Host "`nFeatures Activated at SITE:" $site.Url -ForegroundColor DarkGreen

   #Iterate through each feature activated at Site collection level
   foreach($feature in $site.Features)
   {
      #Write-Host $feature.DefinitionId;
      Write-Output $farmfeatures[$feature.DefinitionId].DisplayName;
   }
    foreach($web in $site.AllWebs)
    {
       Write-Host "`nFeatures Activated at WEB:" $web.Url -ForegroundColor DarkGreen
       #Iterate through each feature activated at web level
       foreach($Feature in $web.Features)
       {
          Write-Output $FarmFeatures[$Feature.DefinitionId].DisplayName;
          #Write-Output $FarmFeatures[$Feature.DefinitionId].GetTitle(1033);
       }
    }
  }

Cmdlet Get-SPFeature para SharePoint 2007:
script de Powershell para informar sobre todas las funciones de la granja de SharePoint


[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

#Get the SharePoint Farm. Equallent to : Get-SPFarm commandlet
$Farm = [Microsoft.SharePoint.Administration.SPFarm]::Local

#Get All feature of the farm. Equallent to: Get-SPFeature commandlet
$FarmFeatures= $Farm.FeatureDefinitions
$FarmFeatures | Select ID,DisplayName, Scope | Sort-Object Scope | Format-Table -GroupBy Scope
Consejo: Para conocer el uso de todas las funciones empresariales de SharePoint, utilice: PremiumWebApplication, PremiumSite, PremiumWeb según corresponda en Nombres para mostrar de funciones.

Encuentre el uso de una característica particular en SharePoint 2007:


#Get-SPWebApplication Cmdlet for MOSS 2007
Function global:Get-SPWebApplication($WebAppURL)
{  
   if($WebAppURL -eq $null)  #Get All Web Applications
    {
  $Farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
    $websvcs = $farm.Services | where -FilterScript {$_.GetType() -eq [Microsoft.SharePoint.Administration.SPWebService]}
    $WebApps = @()
    foreach ($websvc in $websvcs) 
  {
      foreach ($WebApp in $websvc.WebApplications) 
   {
          $WebApps += $WebApp
      }
  }
   return $WebApps
  }
 else #Get Web Application for given URL
 {
  return [Microsoft.SharePoint.Administration.SPWebApplication]::Lookup($WebAppURL)
 }
}

  #Get the SharePoint Farm. Equallent to : Get-SPFarm commandlet
  $Farm = [Microsoft.SharePoint.Administration.SPFarm]::Local

  #Get All feature of the farm. Equallent to: Get-SPFeature commandlet
  $FarmFeatures= $Farm.FeatureDefinitions
  
  #Feature to Search
  $FeatureDisplayName = "IPFSWebFeatures" #Infopath Form Services Feature
  
  #Scan Farm Level Features
  $FarmLevelFeatures = $farm.FeatureDefinitions | Where-Object { ($_.Scope -eq "Farm") -and ($_.DisplayName -eq $FeatureDisplayName) }
  if($FarmLevelFeatures -ne $null)
  {
   "$($FeatureDisplayName) Installed at Farm Level!"
  }
   
   #Get all web applications and scan through 
   $WebApplications = Get-SPWebApplication "https://sharepoint.crescent.com"
   #To process all web applications, simply use: $WebApplications = Get-SPWebApplication 
   foreach($WebApp in $WebApplications)
   {
  Write-Host "Processing web Application : $($WebApp.url)"
  $WebAppLevelFeature = $webApp.Features |  Where-Object { $_.Definition.DisplayName -eq $FeatureDisplayName }
  #If Feature found
  if($WebAppLevelFeature -ne $null)
  {
  "$($FeatureDisplayName) Activated at Web Application $($webApp.URL)"
  }
    
  #Get All site collections of the Web Application  
  $SitesColl = $webApp.Sites  
  
  #Iterate through each site collection
  foreach($Site in $SitesColl)
  {
      #Write-host "Processing Site: $($Site.Url)"
   $SiteLevelFeature = $Site.Features |  Where-Object { $_.Definition.DisplayName -eq $FeatureDisplayName     }
   #If Feature found
   if($SiteLevelFeature -ne $null)
     {
    "$($FeatureDisplayName) Activated at Site Collection $($Site.URL)"
     }
    
    #Enumerate each sub-site
    foreach($web in $site.AllWebs)
    {
         #Write-host "Processing Web: $($Web.Url)"
         $WebLevelFeature = $web.Features | Where-Object { $_.Definition.DisplayName -eq $FeatureDisplayName }
    #If Feature found
     if($WebLevelFeature -ne $null)
        {
          "$($FeatureDisplayName) Activated at Web Level $($web.URL)"
        }
     $web.Dispose()
  }
   $site.Dispose()
  }
}

¿Cómo encuentro todas las funciones personalizadas?
Podemos ejecutar Get-SPFeature en una máquina Sharepoint nueva y realizar ese inventario en un archivo csv.
Ejecútelo nuevamente en su máquina objetivo que tiene características personalizadas y compare.

Últimamente encontré este script en los foros de Technet:


Add-PSSnapin "Microsoft.SharePoint.Powershell" -ErrorAction SilentlyContinue

$siteurl = "https://sharepoint.crescent.com"
$Site = Get-SPSite $siteURL

#send all features to output file features.txt
$site.WebApplication.Farm.FeatureDefinitions `
| where-object {$_.solutionid -ne '00000000-0000-0000-0000-000000000000'} `
| Sort-Object solutionid,displayname `
| ft -property displayname,scope -auto -groupBy solutionid > "d:\features.txt"

#replace solutionId in features.txt with solution name
foreach($solution in $site.WebApplication.Farm.Solutions)
{
    (Get-Content "d:\features.txt") `
    | Foreach-Object {$_ -replace $solution.solutionid.ToString(), $solution.Name} `
    | Set-Content "D:\features.txt"
}

$site.Dispose()

Artículos relacionados