問題
グループを個別のサイト コレクションに分離するエクストラネットがあります。検索による情報漏えいを防ぐため、すべてのサイトの検索表示設定を「ASPX ページをインデックスに登録しない」に設定します。サイト管理者はその設定を変更できるため、ASPX インデックス作成が有効になっているサイトを報告するスクリプトを使用し、定期的に実行するようにスケジュールする予定です。以下は私がこれまでに持っているものです。各サイト コレクションのルート サイトのみがレポートされます。サイト コレクション内のすべてのサイトにループを追加しますが、スクリプトが機能するまで待つことができます。
開発ボックスのルート サイトの 1 つである "http://spdevlc01" の検索設定を変更しても、スクリプトの出力に変化が見られません。AllowAutomaticASPXPageIndexingのMSDN ページは、実際には構成設定自体ではなく、サイトでのきめ細かいアクセス許可の使用を実際に検出していることを示していたので、WebASPXPageIndexMode を取得する行を追加しました。設定を手動で [このサイトの Web パーツのインデックスを作成しない] に変更してスクリプトを実行すると、そのサイトに対して返されるWebASPXPageIndexModeの値は変化せず、自動インデックス作成を意味する '0' が常に表示されます。
脚本
# Down to Set-Location $home, copied form SharePoint Management Shell. Need to be in place to have the SharePoint cmdlets and prevent memory leak.
$ver = $host | select version
if ($ver.Version.Major -gt 1) {$Host.Runspace.ThreadOptions = "ReuseThread"}
Add-PsSnapin Microsoft.SharePoint.PowerShell
Set-location $home
# Get all the web applications in the farm, minus Central Admin
$webApplications = Get-SPWebApplication
# Enumerate all SharePoint web application
foreach($webApplication in $webApplications.GetEnumerator())
{
# Enumerate all the site collections in the web application.
foreach($siteCollection in $webApplication.sites)
{
# Reference to the AllowAutomaticASPXIndexing: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.allowautomaticaspxpageindexing.aspx
$rootWeb = $siteCollection.RootWeb
"$($rootWeb.Url) : $($rootWeb.AllowAutomaticASPXPageIndexing)"
"$($rootWeb.Url) : $($rootWeb.WebASPXPageIndexMode -as [int]) "
$rootWeb.Close()
$siteCollection.Close()
}
}
出力
http://spdevlc01:22000/sites/GetTogether : False
http://spdevlc01:22000/sites/GetTogether : 0
http://spdevlc01:22000/sites/KB : False
http://spdevlc01:22000/sites/KB : 0
http://spdevlc01:22000/sites/TW :
http://spdevlc01:22000/sites/TW : 0
http://spdevlc01 : False
http://spdevlc01 : 0