如何在 LDAP AD 中更新 "usercert" 属性 的值
How to update value of a "usercert" property in LDAP AD
我有一个要求,我需要更新保存在活动目录中计算机的 属性 ("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();
}
我尝试了上面所有的注释代码,但对我没有任何作用。你能帮我解决这个问题吗?
呼叫 GetDirectoryEntry() creates a new DirectoryEntry
object each time you call it, which you can see in the source code here.
所以当你这样做时:
result.GetDirectoryEntry().CommitChanges();
它正在创建一个全新的 DirectoryEntry
对象并对其调用 CommitChanges()
。所以什么都没有改变。
您只需调用 GetDirectoryEntry()
一次并对该对象进行更改。例如:
var resultDe = result.GetDirectoryEntry();
resultDe.Properties["usercert"]).Value = whatever;
resuleDe.CommitChanges();
我有一个要求,我需要更新保存在活动目录中计算机的 属性 ("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();
}
我尝试了上面所有的注释代码,但对我没有任何作用。你能帮我解决这个问题吗?
呼叫 GetDirectoryEntry() creates a new DirectoryEntry
object each time you call it, which you can see in the source code here.
所以当你这样做时:
result.GetDirectoryEntry().CommitChanges();
它正在创建一个全新的 DirectoryEntry
对象并对其调用 CommitChanges()
。所以什么都没有改变。
您只需调用 GetDirectoryEntry()
一次并对该对象进行更改。例如:
var resultDe = result.GetDirectoryEntry();
resultDe.Properties["usercert"]).Value = whatever;
resuleDe.CommitChanges();