キー/値が UserPrincipal 属性であるディクショナリがあります。これらはcsvファイルから読み込まれています。この csv ファイルには、更新する対応する AD ユーザーの employeeId も含まれています。目標は、csv で提供された値で AD の各ユーザー属性を更新することです。
ただし、csv で提供される属性は実行時までわかりません。
特に DirectoryServices.AccountManagement を使用してから Update / Save を使用して、提供された各属性名を正しい UserPrincipal 属性と照合するにはどうすればよいですか?
Reflection と 2.0 の DirectoryEntry を使用してそこに到達する方法がありますが、それでも更新して保存する方法が必要です。
(「userToUpdate」には UserPrincipal インスタンスへの参照があり、「属性」は csv から提供されたキー/値です)
public void UpdateAttributes(List<ADUser> users)
{
// get all the UserPrincipal properties
List<string> userPrincipalProperties =
users[0].UserPrincipal.GetType().GetProperties()
.Select(property => property.Name).ToList();
foreach (var userToUpdate in users)
{
try
{
foreach (KeyValuePair<string, string> attribute in userToUpdate.Attributes
.Where(attribute => userPrincipalProperties.Contains(attribute.Key))
.Where(attribute =>
{
return value.ToString() != attribute.Value;
}))
{
//something like userToUpdate.UserPrincipal.{property-name} = attribute.Value;
}
// save...
}
catch (Exception ex)
{
_log.Error(ex.Message);
}
}
}