こんにちは。Forefront Identity Manager (FIM) のサポートチームです。
今回は、Exchange 2010 /2013 が混在する環境で発生するトラブルとその回避策を記載いたします。
■問題の概要
Exchange Server 2010 / 2013 が混在する環境で連絡先オブジェクトの同期機能である GALSync を構成し、Exchange Server 2010 を管理するフォレストに対して Export を実行すると、下記エラーが出力されることを確認しております。
[Message: The property 'AddressListMembership' is on a read-only object and can't be modified.]
このエラーは 連絡先オブジェクトを作成した後に実行される Exchange の PowerShell コマンドレット"Update-Recipient" が実行されるタイミングで発生します。
なお、これは FIM を介さず Exchange サーバー側で"Update-Recipient" を手動で実行した際にも発生いたします。
■問題が発生する理由
Exchange Server では、どのバージョンの Exchange Server において作成されたオブジェクトかの確認のために msExchVersion 属性をオブジェクトに付与します。
この属性は、オブジェクトの管理の際に使用される属性であり、上位のバージョンで作成されたオブジェクトを下位のバージョンの Exchange Server によって操作することができないようにするために使用されています。
このため、Exchange Server 2013 で作成されたユーザーオブジェクトには Exchange Server 2013 のバージョンを示す値が msExchVersion 属性に付与されますが、それを同期先の Exchange Server 2010 の環境に同期を行い"Update-Recipient" を実行すると、上位バージョンのオブジェクトを操作することを禁止するために上記エラーが出力されてしまいます。
■問題の運用回避案
msExchVersion 属性の値はそれぞれ以下の通りとなります。
----- msExchVersion 属性 -----
Exchange 2010: 44220983382016
Exchange 2013: 88218628259840
この問題の回避方法についてですが、GALSync の既定の動作では mxExchVersion の値はそのまま連絡先オブジェクトに引き渡されるため、出力先の Exchange Server のバージョンに合わせて msExchVersion を定数として同期することを案として提示します。
具体的には Exchange 2010 側の MA の"Attribute Flow" 設定の"msExchVersion" 属性を選択し、"Mapping Type" を"Direct" から"Advanced" に変更した上で"Edit" をクリックします。
"Advanced Export Attribute Flow Options" 画面が表示されますので、"Mapping Type" に "Constant" を選択しテキスト ボックスに上記の msExchVersion 属性の値を入力します。
この対処により、 Exchange Server 2010 側の 連絡先オブジェクトに入る msExchVersion 属性の値がすべて Exchange Server 2010 を示す“44220983382016” となるため、エラーの原因となる連絡先オブジェクトの msExchVersion が、稼働している Exchange Server のバージョンより新しい場合にエラーを出力するという状況は回避されます。
■免責事項
連絡先オブジェクトの msExchVersion 属性の値を変更することによって本問題は回避は可能です。
しかしながら、msExchVersion 属性を更新することに関しましては、Exchange Server Team によってテストが実施されていない方法であるため、予期しない現象が発生する可能性が考えられます。
このため、いくつかの実装事例はございますが、十分なテストの実施をお願いいたします。