Active Directory にはいろんな属性がありますが、あまりメジャーではない属性に thumbnailPhoto があります。
この属性にはユーザー、連絡先オブジェクトの写真(jpg)を保持しすることができます。
属性そのものはオクテット文字列でバイト配列です。で、この属性に画像を突っ込めば顔写真付きアドレス帳的にActive Directoryを活用できるわけですが…
あいにく標準ではせっかくの顔写真を使うようなアプリケーションが有りませんでした。(過去形)
なぜ過去形かというと、最近発売されたOffice 2010のOutlook 2010では、Exchange Server 2010と連携して顔写真を表示させることが標準でできるようになっています。
※Outlook 2010以前は、カスタムのAdd-inなりを利用する必要がありました。
※Exchange Server 2010でなくてもLDAPアドレス帳としてActive Directoryを使えば表示はされそうですけど、今は未確認。
ということで、今回はthumbnailPhotoを使ってOutlook 2010で顔写真を表示するまでをやりたいと思います。
1: スキーマの準備
thumbnailPhoto属性そのものはActive Directoryを構築すると既に登録されているのですが、標準ではグローバルカタログに複製されません。
組織にドメインコントローラーが1台といった環境であればいいのですが、複数台のグローバルカタログがあったり、大規模になると登録はしてるが参照できないといった問題が発生します。
なので、まずはグローバルカタログに複製されるように設定しておきたいと思います。
1. スキーママネージャーのレジスト
下記コマンドを実行してスキーママネージャーを使えるようにします。(そんなの既に実施済みだぜーっていう訓練されたActive Directory管理者は飛ばしてください)
regsvr32 schmmgmt.dll
2. 属性の修正
mmcを起動し、スナップインの追加と削除から”Active Directory スキーマ”を追加します。
”属性”から”thumbnailPhoto”のプロパティを表示し、”グローバルカタログにこの属性をレプリケートする”にチェックを付けます。
スキーマの修正は以上でおしまい。
2: 画像の準備
thumbnailPhoto属性に保存する画像ですが、10KバイトまでのJPG画像と制限されています。10Kバイト未満にするのが望ましいです(*)。Active Directory上に保存するとなると、特に大規模であればそれだけでActive DirectoryのDBサイズが膨れてしまうので10,00バイト未満のJPG画像にしておく必要があります。
ちなみに推奨サイズは96×96ピクセルのようです。(大きさに制限は無いと思いますが、Outlookでの表示時は96×96ピクセルが一番収まり良い。縦横比崩れてても表示はされます)
*実際に10Kバイト以上の画像を登録できちゃいます。(2010.07.20修正)
3: 画像の保存
用意した画像をActive Directory上に保存します。
保存方法はなんでもかまわないのですが、Exchange Server 2010にはユーザー操作を行うコマンドレットが用意されており、そちらを使って画像を保存することが出来ますので今回はそちらを使います。
Import-RecipientDataProperty -Identity "user name" -Picture -FileData ([Byte[]]$(Get-Content -Path "C:\temp\ukun.jpg" -Encoding Byte -ReadCount 0))
※ユーザー名とパスは適宜修正ください。
登録が正常に完了すると、Active Directory上のthumbnailPhoto属性に値が保存されます。
ちなみにExchange Server 2010のコマンドレットでなくても構いません。
$photo = [byte[]](Get-Content C:\temp\ukun.jpg -Encoding byte)
Set-ADUser ukun -Replace @{thumbnailPhoto=$photo}
こんな感じでActive Directory上の属性に直接保存できます。
4: 結果確認
では画像が登録できましたので確認したいと思います。
画像登録前
登録後
登録前はアカウントのプロパティのアヤシイ空欄があったりのっぺらぼうな画像が表示されていましたが、登録後はメールの送信者欄、Outlook Social Connectorやプレゼンス情報に画像が表示されてるのが分かります。
もちろんバックステージビューにも。
うーくんがいっぱい♪
参考:
thumbnailPhoto属性そのものはLDAP準拠な属性です。また似たような属性にjpegPhoto属性もあるのですが、こちらはWindows Server 2003からの属性でWindows Server 2000では利用できないようです。ということで、より標準的なthumbnailPhoto属性を利用しましょう、ということですね。(thumbnailPhoto属性はWindows 2000のActive Directoryからあります)
jpegPhotoへの登録とかは下記が参考になると思います。(属性をthumbnailPhotoにすればそのまま利用できるかと)
- Using the jpegPhoto attribute in AD – Part I
- Using the jpegPhoto attribute in AD – Part II
- ユーザー オブジェクト、Active Directory 内の ThumbNailPhoto 属性を操作する方法
- How To: Use AD PowerShell to Manage Outlook 2010 User Photos with Previous Versions of Exchange
また登録した画像はそのままだとExchange Server 2010のオフラインアドレス帳には表示されないので、もろもろ設定する必要があります。
詳しくは GAL Photos in Exchange 2010 and Outlook 2010を参照。
ちなみにthumbnailPhoto属性に保存した画像がExchange 組織外へのメールにくっついて送信されたりすることはありませんので、組織内で安全に使うことが可能です。
まとめ
ということでほとんどYou Had Me At EHLOのパクリみたいな記事ですが、顔写真あるだけでパッと誰からのメールか分かる、会ったことない人でもどんな人かわかる等、より親近感がわくITインフラを作ることができるようになります。
またActive Directoryを使ってますので別建てのアドレス帳DB等を作らなくてもいいのがいいですね。(大規模な環境を考えるとアドレス帳専用のAD LDSなどを使った方が良いのかも知れませんが…)
もちろん標準的なLDAPの操作で画像を取得できますので、他のアプリケーションのユーザー情報に顔写真を表示させるといったことも容易かと思います。
是非皆さんも活用してみてください。




