サイトのユーザー情報を強制的に AD と同期させる方法

MOSS 2007 や SharePoint 2010 では、サイトのユーザー情報におけるユーザーの表示名やメールアドレスなどの情報は、プロファイルをインポートすることにより AD と同期させることが可能です。

WSS 3.0 や SharePoint Foundation 2010 では基本的にはユーザーが手動でサイトのユーザー情報を更新して情報を同期する必要があります。

MOSS 2007 や SharePoint 2010 におけるプロファイルの同期の仕組みは次のとおりです。

1. プロファイルのインポート (同期) により AD から SharePoint のユーザープロファイルに情報が取り込まれる。

2. 既定では 1 時間に 1 回実行されているプロファイルの同期タイマージョブによりサイトのユーザー情報に同期される。

この 2 段階のプロセスを経て、最終的にサイトのユーザー情報に情報が反映されます。

なお、上記 2 のプロファイルの同期ジョブでは、既定では「アクティブユーザー」に対してのみ同期処理が実行されます。

SharePoint ではユーザーが「アクティブ ユーザー」かどうか、コンテンツ データベースの UserInfo テーブルで管理しており、「アクティブユーザー」に対しては tp_IsActive フラグが 1 に設定されます。

ユーザーは以下のいずれかの条件を満たすことで、アクティブとみなされます。

・サイトの権限に直接ユーザー登録されている

・過去に何らかのアイテムの更新処理を行ったことがある

したがって、サイトに AD グループ経由で権限登録されており、かつ、「閲覧のみ」の権限しか持たずアイテムを更新したことが無いユーザーについては非アクティブと認識され、結果として AD の情報が更新されてもサイトのユーザー情報が更新されないという状況が発生します。

既定でアクティブユーザーに対してのみプロファイルの同期処理が実行される動作は、製品の想定された動作ですが、「stsadm –o sync –ignoreisactive 1」コマンドを実行することでこの動作を変更でき、非アクティブユーザーに対してもプロファイル同期が行われるよう、動作を変更することが可能です。このあたりの詳しい解説については以下の資料をご参照ください。

  How to Update Inactive User Profile Information in SharePoint

  https://blogs.msdn.com/b/rcormier/archive/2012/09/08/how-to-update-inactive-user-profile-information-in-sharepoint.aspx

ここまでの話は、比較的 MOSS の頃からメジャーな話なので、既にご存知の方もおられるかと思います。

有志の方々が PowerShell スクリプトなどで強制的に SPUser オブジェクトのプロパティを書き換える方法など紹介されておりますので、既にこのようなソリューションで対応されている方もおられるかと思います。

  Update Inactive User Information Using PowerShell

  https://gallery.technet.microsoft.com/scriptcenter/Update-Inactive-User-736dec27

  MOSS running stsadm –o migrategroup command keeps the old group name and does not replace with the new name

  https://blogs.msdn.com/b/joerg_sinemus/archive/2010/09/28/moss-running-stsadm-o-migrategroup-command-keeps-the-old-group-name-and-does-not-replace-with-the-new-name.aspx

  SPS2010 running stsadm –o migrategroup command keeps the old group name and does not replace with the new name

  https://blogs.msdn.com/b/joerg_sinemus/archive/2010/12/16/sps2010-running-stsadm-o-migrategroup-command-keeps-the-old-group-name-and-does-not-replace-with-the-new-name.aspx

で、ここからが本題です。

SharePoint 2010 および SharePoint Foundation 2010 以降に限られますが、実は、以下の PowerShell コマンドにより強制的にサイトのユーザー情報を AD の情報と同期させることが可能です。

Get-SPUser -Web <サイトの URL> -Identity <ユーザーログオン名> | Set-SPUser -SyncFromAD

) Get-SPUser -Web https://sp2010 -Identity contoso\user1 | Set-SPUser -SyncFromAD

注意点として、このコマンドはプロファイルを更新するものでは無く、あくまでサイトのユーザー情報を更新するものなので、ユーザープロファイルは更新されません。また、サイト コレクション単位で実行する必要があります。

この方法を応用すれば、SharePoint Foundation においてもユーザー情報の同期が実装できるかもしれません、、、が、ユーザー数が多い環境では AD に対して負担をかけるかもしれませんので、実施にあたっては十分に検証していただくことをお勧めします。

Get-SPUser

  https://technet.microsoft.com/ja-jp/library/ff607580.aspx

  Set-SPUser

  https://technet.microsoft.com/ja-jp/library/ff607827.aspx