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
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()
