Как обновить значение свойства usercert в LDAP AD - PullRequest
0 голосов
/ 13 января 2020

У меня есть требование, при котором мне нужно обновить значение, сохраненное в свойстве ("usercert") компьютера, присутствующего в активном каталоге.

// Получение значения свойства из AD

DirectoryEntry entry = new DirectoryEntry(LDAPPath, LDAPUser, DecryptPwd(LDAPPwd, LDAPKey)); 
DirectorySearcher searcher = new DirectorySearcher(entry); 
searcher.Filter = string.Format("(&(objectCategory=computer)(Name=" + MachineName + "))"); 
result = searcher.FindOne(); 
byte[] text= (byte[])result.GetDirectoryEntry().Properties["usercert"].Value;

// Обновление нового значения в строку AD updatedText = "New Text";

if (result.GetDirectoryEntry().Properties["usercert"] != null && 
              result.GetDirectoryEntry().Properties["usercert"].Value != null) 
{
     byte[] updatedTextByte = Encoding.ASCII.GetBytes(updatedText);
     result.GetDirectoryEntry().InvokeSet("usercert", updatedPassByte);
     //(result.GetDirectoryEntry().Properties["usercert"]).Value = Encoding.ASCII.GetBytes(updatedText);
     //result.GetDirectoryEntry().Properties["usercert"].Add(Encoding.ASCII.GetBytes(updatedText));
     //result.GetDirectoryEntry().Properties["usercert"][0] = Encoding.ASCII.GetBytes(updatedText);
     result.GetDirectoryEntry().CommitChanges();  
}

Я пробовал все приведенные выше комментарии, но у меня ничего не работает. Не могли бы вы помочь мне решить эту проблему.

1 Ответ

0 голосов
/ 14 января 2020

Вызов GetDirectoryEntry () создает новый DirectoryEntry объект каждый раз, когда вы вызываете его, что вы можете увидеть в исходном коде здесь .

Так что когда вы делаете это:

result.GetDirectoryEntry().CommitChanges();

Создается новый объект DirectoryEntry и вызывается CommitChanges() для этого. Так что ничего не изменилось.

Вам нужно будет вызвать GetDirectoryEntry() только один раз и внести изменения в этот объект. Например:

var resultDe = result.GetDirectoryEntry();
resultDe.Properties["usercert"]).Value = whatever;
resuleDe.CommitChanges();
...