現象
次のような状況で問題が発生します。
-
SharePoint Server 2010 環境で、動作している User Profile Service アプリケーションを使用している
-
2010年8月の累積更新プログラムまたはそれ以降の SharePoint server 2010 がインストールされていない場合
-
複数のサイトコレクションが含まれているコンテンツデータベースをデタッチしてアタッチしている場合
このシナリオでは、データベースを web アプリケーションに接続した後、いくつかのサイトコレクションのメンバーシップ情報が変更され、影響を受けるユーザーの "My Profile" の [メンバーシップ] タブに表示されません。 ユーザーに表示されるメンバーシップ情報は、古いものになります。
原因
Microsoft では、削除されたサイトコレクションのクリーンアップに関する製品の問題であり、SharePoint 2010 の累積更新プログラム (サーバーパッケージ KB 2352342 ) 2010 で修正されました。 ただし、この修正プログラムは、修正プログラムをインストールする前に、データベースをデタッチすることによって、この状態になっているサイトコレクションに影響を与えません。 影響を受けるサイトコレクションのメンバーシップ同期を復元するには、解決策の手順に従ってください。
解決方法
すべてのサイトコレクションのコンテンツデータベースとプロファイルデータベース間のメンバーシップ情報の同期を復元するには、次の手順に従います。警告:
-
この手順を実行すると、現在の SharePoint グループ関連のメンバーシップ情報はすべてプロファイルデータベースから削除され、"SharePoint の完全な同期ジョブ" のユーザープロファイルがすべてのサイトコレクションを正常に処理するまで、すべての "メンバーシップ" 情報を確認することはできません。
-
手順が実行されている間、次のタイマージョブを無効にする必要があります。 "{UPA} ユーザープロファイルから SharePoint 完全な同期" ジョブ {UPA} は User Profile Service アプリケーションの名前です。
SharePoint 2010 管理シェルを、ローカル管理者のユーザーとして (ファームの管理者グループのメンバーでもあり、User Profile Service アプリケーションには "フルコントロール" アクセス許可が付与されている) コンピューターで開きます。次の Powershell スクリプトスニペットの最初の行の url を、影響を受けるサイトコレクションの1つに置き換えます (このコードスニペットは1回実行される必要があり、ユーザープロファイルアプリケーションから現在のメンバーシップグループを削除します)。
$url = "http://server/sites/sitecoll";$SPSite = get-spsite $url;$context = [Microsoft.SharePoint.SPServiceContext]::GetContext($SPSite)$manager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager $context$sourceMethod = [Microsoft.Office.Server.UserProfiles.MemberGroup].getmethod("get_Source")$deleteMethod = [Microsoft.Office.Server.UserProfiles.MemberGroup].getmethod("Delete")foreach ($memberGroup in $manager.GetMemberGroups()){ if ($sourceMethod.Invoke($memberGroup, @()) -eq "SharePointSite") { $deleteMethod.Invoke($memberGroup, @()) } }
この PowerShell スクリプトが完了したら、次のコマンドを実行して、コンテンツデータベースの新しい同期をスケジュールしてください。
Stsadm -o sync -deleteolddatabases 0
次の Powershell スクリプトを実行して、ファーム内のすべてのサイトコレクションの ' 完全なメンバーシップ同期 ' をスケジュールします。Get-SPSite-すべて制限 |% {[WSSProfileSynch]:: ScheduleSiteForFullSynchronization ($ _); $ _ "のように入力します。Close ()} この投稿をお持ちの場合は、次の手順に従ってください。
-
サーバーの全体管理を開き、[監視] セクションの [ジョブ定義のレビュー] ページをクリックします。
-
"{UPA} ユーザープロファイルから SharePoint の完全な同期へのタイマージョブ" {UPA} "は、User Profile Service アプリケーションの名前です。
-
[ジョブのタイトル] をクリックし、[今すぐ実行] をクリックします。
-
ジョブが完了すると、メンバーシップ情報は最新の状態になり、以前に影響を受けたサイトコレクションの後続の実行時に、自動的に同期されます。
詳細情報
プロファイルの同期のスケジュール (Sharepoint server 2010) タイマージョブのリファレンス (sharepoint server 2010)