からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

PowerShell で SharePoint 2013 の [サイトの機能] と同じ一覧を取得する

PowerShell で [サイトの機能] と同じように機能名とアクティブの状態を一覧で取得しようとしたのですが、ちょっとコツが必要だったのでメモしておきます。

機能の一覧を取得するのは Get-SPFeature コマンドレットでできるのですが、範囲を指定しない場合はインストールされているすべての機能を、範囲を指定した場合は有効になっている機能を取得します。*1 つまり、アクティブかどうかを取得するには、有効な機能の一覧に含まれるかをそれぞれチェックする必要があります。

Add-PSSnapin "Microsoft.SharePoint.PowerShell"

$url = "{{siteurl}}"
$locale = 1041
$version = 15

$features = Get-SPFeature -Web $url -Limit All | Where-Object { $_.Hidden -eq $false }

Get-SPFeature -Limit All |
    Where-Object { $_.Scope -eq "Web" } |
    Where-Object { $_.CompatibilityLevel -eq $version } |
    Where-Object { $_.Hidden -eq $false } |
    ForEach-Object { [PSCustomObject]@{
        Id = $_.Id
        Title = $_.GetTitle($locale)
        IsActive = ($features | ForEach-Object { $_.Id }) -contains $_.Id
    }} |
    Sort-Object Title

サイトコレクションの機能で同じように取得したい場合は Web をそれぞれ Site に変更すればいけると思います。

*1:WebApplication、Site、Web のパラメーターのこと。