我知道,我们可以像这样得到一个DirectoryEntry:
string conPath = "LDAP://10.0.0.6/DC=wds,DC=gaga,DC=com";
string conUser = "administrator";
string conPwd = "Iampassword";
DirectoryEntry de = new DirectoryEntry(conPath, conUser, conPwd, AuthenticationTypes.Secure);
我们可以像这样更改用户密码:
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = String.Format("sAMAccountName={0}", "xumai");
SearchResultCollection results = deSearch.FindAll();
foreach (SearchResult objResult in results)
{
DirectoryEntry obj = objResult.GetDirectoryEntry();
obj.Invoke("setPassword", new object[] { "Welcome99" });
obj.CommitChanges();
}
如果使用
string x = obj.Guid.ToString();;
我们可以获取用户的objectGUID“0b118130-2a6f-48d0-9b66-c12a0c71d892”
我怎样才能更改密码基础这个objectGUID?
如何在用户群中搜索此objectGUID表单“LDAP://10.0.0.6/DC=wds,DC=gaga,DC=com”?
有没有办法过滤它? etc strFilter =“(&(objectGUID = 0b118130-2a6f-48d0-9b66-c12a0c71d892))”;
希望得到你的帮助
感谢。
答案 0 :(得分:7)
在不更改代码的情况下,您已获得multiple way to bind to Active-Directory。以下是另外两种方式:
第一个use GUID to bind to an object:
string conPath = "LDAP://10.0.0.6/<GUID=0b118130-2a6f-48d0-9b66-c12a0c71d892>";
第二个use SID to bind to an object:
string conPath = "LDAP://10.0.0.6/<SID=S-X-X-XX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXX-XXX>";
使用security Principals你可以这样做:
UserPrincipal user = UserPrincipal.FindByIdentity(adPrincipalContext, IdentityType.DistinguishedName,"CN=User1Acct,OU=TechWriters,DC=wds,DC=gaga,DC=com");
或
UserPrincipal user = UserPrincipal.FindByIdentity(adPrincipalContext, IdentityType.Guid,"0b118130-2a6f-48d0-9b66-c12a0c71d892");
答案 1 :(得分:0)
如果选择.NET 3.5,则应该开始使用System.DirectoryServices.AccountManagement
。这是一个全新的世界。以下是通过GUID查找用户的代码:
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain,
"LDAP://10.0.0.6",
"DC=wds,DC=gaga,DC=com",
"administrator",
"Iampassword"))
{
string theGuid = "0b118130-2a6f-48d0-9b66-c12a0c71d892";
UserPrincipal up = UserPrincipal.FindByIdentity(pc, IdentityType.Guid, theGuid);
}
相同的模板很容易适应其他对象类型。