1

キー/値が 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);
            }

        }
    }
4

0 に答える 0