からめもぶろぐ。

SharePoint が得意なフレンズなんだね!すごーい!

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

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

f:id:karamem0:20160304152358p:plain

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

Add-PSSnapin "Microsoft.SharePoint.PowerShell"

$url = "<サイトのURL>"
$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 に変更すればいけると思います。

Get-SPFeature

*1:"-WebApplication", "-Site", "-Web" のパラメーターのこと。