我有一个字典,其键/值是 UserPrincipal 属性。这些是从 csv 文件中读取的。此 csv 文件还具有要更新的相应 AD 用户的employeeId。目标是使用 csv 中提供的值更新 AD 中的每个用户属性。
但是,直到运行时我才知道 csv 中提供了哪些属性。
如何将每个提供的属性名称与正确的 UserPrincipal 属性进行匹配,特别是使用 DirectoryServices.AccountManagement 然后更新 / 保存?
我有一种使用 Reflection 和 2.0 的 DirectoryEntry 的方法,可以让我部分地到达那里,但我仍然需要一种更新和保存的方法:
(“userToUpdate”引用了 UserPrincipal 实例,“Attributes”是从 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);
}
}
}