2012年3月18日日曜日

Exchange 2007のグローバル アドレス一覧とオフラインアドレス帳について(2)

前回の続き。

オフラインアドレス帳とは
Exchange 2007にはオフライン アドレス帳というものがある。
これは、Outlookの「Exchange キャッシュ モード」がOnの場合に使われるもので、グローバル アドレス一覧のローカルキャッシュである。毎回Exchange Server上のアドレス帳を見に行かなくても済むので、サーバの負荷軽減や、アドレス帳の表示レスポンス改善に効果がある。
ローカルキャッシュといいつつも、データはExchange Server上で生成され、拡張子oabのファイルとしてクライアントにダウンロードされる仕組みになっている。
Outlookクライアントでアドレス帳画面より「グローバル アドレス一覧」を選択すると、oabファイルがダウンロードされるまではExchange Server上のグローバル アドレス一覧を見に行き、oabファイルのダウンロードが完了すると以後はそちらを見に行く。
当たり前の話だけど、Exchange キャッシュ モードがOffの場合には常にExchange Server上のグローバル アドレス一覧が参照される。
Figure.1 グローバル アドレス一覧(参考画像)

オフラインアドレス帳も複数作れる
さて、前回、グローバル アドレス一覧は複数作れるという話をしたが、ではオフライン アドレス帳はどうか?
答えはYesで、New-OfflineAddressBookコマンドを使うとオフライン アドレス帳を追加することができる。このコマンドは、-AddressListsというパラメータで元ネタを指定できるようになっている。こいつに任意のグローバル アドレス一覧名を指定してあげれば、好きなグローバル アドレス一覧を元ネタとしたオフラインアドレス帳が生成されるのでは? と思い、検証してみた。

どのオフラインアドレス帳がクライアントに表示されるのか
検証の前に、Outlookの動作について知っておく必要がある。
Exchange Server上に複数のオフライン アドレス帳を作成しても、クライアントのOutlookにはどれか1つしかダウンロードされない。それもそのはず、オフラインアドレス帳はグローバル アドレス一覧のキャッシュという位置づけであり、前回述べたようにグローバル アドレス一覧は1つしかOutlookに表示されないからだ。
じゃあ、どのオフラインアドレス帳がクライアントにダウンロードされるか?
これは
  • メールボックス ストア単位
  • ユーザ単位
の2種類の指定が可能だ。
メールボックス ストア単位で設定する場合は、Exchange管理コンソールか、Set-MailboxDatabaseコマンドを利用する。
Set-MailboxDatabase -Identity "<メールボックスストア名>" `
 -OfflineAddressBook "<オフラインアドレス帳>"
ユーザ単位で指定する場合はExchange管理シェルからしか設定できず、Set-Mailboxコマンドを使う。
Set-Mailbox -Identity "<ユーザ名>" `
 -OfflineAddressBook "<オフラインアドレス帳>"

メンバーを絞ったオフラインアドレス帳を作りたい。
ここまでの話を総合すると、
  1. メンバーを絞ったグローバル アドレス一覧を作成。
  2. そのグローバル アドレス一覧を元ネタとしたオフライン アドレス帳を作成。
  3. ユーザに対して、2で作ったオフライン アドレス帳を使うよう指定。
とやれば、ExchangeキャッシュモードがOnでもOffでも、Outlookのアドレス帳に表示されるメンバーを絞ることができそうである。

ところが、実際に試してみると、そのような動きをしてくれない。
私が実際に検証したところ、Outlook起動直後(oabファイルがダウンロードされる前)はアドレス帳に表示されるメンバーが絞られていたが、oabファイルのダウンロードが完了した直後から全ユーザが表示されるようになってしまった。

なぜか?
調査の結果、
New-OfflineAddressBookの-AddressListsパラメータにいずれかのグローバル アドレス一覧を指定すると、その指定は無視(?)されて、必ず「組織内で一番サイズの大きいグローバル アドレス一覧」を元ネタにしたオフライン アドレス帳が作られる
 ということが分かった。これがExchange Server 2007の仕様なのだそうだ。イケてないでしょこれ…。2010はどうだか知らん。

どうすればよい?
対処法はちゃんとあって、-AddressListsパラメータに「グローバル アドレス一覧」ではなく「アドレス一覧」を指定すれば、ちゃんとそいつを元ネタにしたオフライン アドレス帳が作成されるのだそうな。
手順は下記のようになる。
  1. メンバーを絞ったグローバル アドレス一覧を作成。
  2. メンバーを絞ったアドレス一覧も作成。
  3. そのアドレス一覧を元ネタとしたオフライン アドレス帳を作成。
  4. ユーザに対して、3で作ったオフライン アドレス帳を使うよう指定。
  グローバル アドレス一覧とただのアドレス一覧は性質が違うのでちょっと困るんだけど。

余談:PowerShellのコマンドレットの-whatifパラメータを活用すべし。
Set-hogehogeとかAdd-hogehogeとかNew-hogehoge系のコマンドに-whatifパラメータをつけると、そのコマンドの操作内容の確認ができる。実際の操作は行われないので、コマンドのSyntaxや引数の間違いを事前に確認することができる。すごく便利なので、本番環境への設定投入の際には毎回やったほうがいいと思う。
手順書作成にも大活躍だ。

0 コメント:

コメントを投稿