Как использовать objectGUID для получения DirectoryEntry? - PullRequest
3 голосов
/ 11 июля 2011

Я знаю, мы можем получить 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"

как я могу изменить это пароль базы этого объекта GUID?

как выполнить поиск в базе данных этого userGUID в форме "LDAP: //10.0.0.6/DC=wds,DC=gaga,DC=com"?

есть ли способ отфильтровать это? etc strFilter = "(& (objectGUID = 0b118130-2a6f-48d0-9b66-c12a0c71d892))";

надеюсь на вашу помощь

спасибо.

Ответы [ 2 ]

7 голосов
/ 12 июля 2011

Без изменения вашего кода у вас есть несколько способов привязки к Active-Directory .Вот два других способа:

Первый использует GUID для привязки к объекту :

string conPath = "LDAP://10.0.0.6/<GUID=0b118130-2a6f-48d0-9b66-c12a0c71d892>";

Второй использует SID для привязки к объектуобъект :

string conPath = "LDAP://10.0.0.6/<SID=S-X-X-XX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXX-XXX>"; 

Используя Принципы безопасности , вы можете сделать это следующим образом:

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");
0 голосов
/ 11 июля 2011

Если вариант .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);
}

Этот же шаблон будет легко адаптирован для других типов объектов.

...