AD ユーザーを FIM にインポートし、いくつかの情報を SQL テーブルにエクスポートする FIM 2010R2 同期エンジン プロジェクトを実行しています。プロビジョニング コードを作成しましたが、正常に動作します。
これが私のターゲットSQLテーブルです。
CREATE TABLE [dbo].[tbl_FGPP_Members](
[MemberObjectGUID] [varbinary](50) NULL,
[MemberDN] [nvarchar](255) NOT NULL,
[MemberObjectType] [nvarchar](10) NOT NULL,
[Member_ADDomain] [nvarchar](16) NULL,
[Member_sAMAccountName] [nvarchar](64) NULL
) ON [PRIMARY]
SQL 用の FIM 管理エージェントで、MemberDN をアンカーとして設定しました。つまり、プロビジョニング コードからのみ書き込むことができ、広告ユーザーから識別名を直接渡すことはできません。
ただし、広告ユーザー情報が SQL に取り込まれた後、その広告ユーザーの名前が変更されたり、広告内で移動されたりすると、distinguishedName が変更されます。これらの変更を再インポートするときに、FIM で MemberDN 列を更新できるようにします。これにはフロー ルールを設定できないため (MemberDN は読み取り専用であると表示されているため)、mvobject の次の条件を満たしている場合は、プロビジョニング コードから次のことを実行してみました。
if(sqlFGPPUser.Connectors.Count == 1)
{
updateFGPPUsersInSQL(mventry, sqlFGPPUser);
}
機能は次のとおりです。
void updateFGPPUsersInSQL(MVEntry mventry, ConnectedMA sqlFGPPUser)
{
CSEntry csentry;
ReferenceValue dn;
csentry = sqlFGPPUser.Connectors.ByIndex[0];
dn = sqlFGPPUser.EscapeDNComponent(mventry["ADdistinguishedName"].Value);
if (mventry["ADdistinguishedName"].Value.ToLower() != csentry.DN.ToString().ToLower())
{
try
{
csentry.DN = dn;
}
catch (Exception Ex)
{
throw new Exception("Exception Message: Exception encountered while renaming the MemberDN " + Ex.Message.ToString());
}
}
}
基本的に私がやっていることは、名前の変更が発生したかどうかを確認することです。それ以外の場合は、実行中の同期実行プロファイルのすべての mvobject に対して毎回実行されます。
ただし、実行するとエラーが発生します。広告で名前が変更/移動されたユーザーの場合、それらの変更をインポートし、同期を実行すると次のようになります。
System.Exception: Exception Message: Exception encountered while renaming the MemberDN attribute MemberDN is read-only
at Mms_Metaverse.MVExtensionObject.updateFGPPUsersInSQL(MVEntry& mventry, ConnectedMA& sqlFGPPUser) in D:\FIM C# Code\FGPP100\FGPP100\MVExtension\MVExtension.cs:line 526
at Mms_Metaverse.MVExtensionObject.Microsoft.MetadirectoryServices.IMVSynchronization.Provision(MVEntry mventry) in D:\FIM C# Code\FGPP100\FGPP100\MVExtension\MVExtension.cs:line 566
更新された AdDistinguishedName で MemberDN 列を更新するにはどうすればよいですか? :(
ありがとうございました。GT