Używam przestrzeni nazw System.DirectoryServices.AccountManagement, aby znaleźć użytkowników domeny i odpowiadające im grupy zabezpieczeń AD. To działa dobrze.Znajdź lokalne grupy, do których należy użytkownik domeny?
Używam również tej przestrzeni nazw do wysyłania zapytań do lokalnych grup bezpieczeństwa na zdalnym serwerze. Jestem w stanie znaleźć grupę bezpieczeństwa, a następnie wymienić użytkowników tej grupy bez problemu.
Co mam problemy z wyświetla których lokalne grupy należy dany użytkownik domeny do:
PrincipalContext localmachine = new PrincipalContext(ContextType.Machine, "ServerName");
PrincipalContext domain = new PrincipalContext(ContextType.Domain);
// find the user using the domain context (Works fine)
UserPrincipal user = UserPrincipal.FindByIdentity(domain, userName);
// if found - grab its groups
if (user != null)
{
// The get groups method is the only method that would accept a new context
PrincipalSearchResult<Principal> groups = user.GetGroups(localMachine);
// no groups are returned .... removed rest of code
}
Ja próbuje użyć metody getgroups przechodzący w localMachine PrincipalContext ale żadne grupy są zwracane.
Użytkownicy istnieją tylko w domenie AD. Nie ma wpisu dla tego użytkownika w lokalnych użytkownikach na localMachine. Użytkownicy domeny są dodawani do lokalnych grup zabezpieczeń.
Wszelkie pomysły? Chciałbym móc pobrać listę wszystkich lokalnych grup, do których należy ten użytkownik domeny, a następnie sprawdzić, czy pewne grupy istnieją na tej liście. Jedyną opcją, która działa teraz, jest przeszukiwanie niektórych grup w systemie i sprawdzanie, czy użytkownik domeny należy do tej grupy.
Podobne pytanie tutaj - mam nadzieję, że pewnego użytku - http://stackoverflow.com/questions/4809460/determine-nested-groups-of-windowsidentity-instance – dash
Próbowałem zrobić to w ten sposób. Metoda FindByIdentity zwraca wartość NULL podczas wyszukiwania użytkownika na komputerze. Zakładam, że dzieje się tak, ponieważ nie utworzono faktycznego użytkownika lokalnego. Jest to użytkownik domeny. Próbowałem już przekazać nazwę użytkownika z domeną i bez niej. –
Przekopując stary kod, stwierdzam, że zrobiłem to dokładnie tak, jak opisałeś; wyliczanie lokalnych grup maszyn (za pośrednictwem DirectorySearchera), a następnie wyliczanie ich w celu sprawdzenia, czy mogę znaleźć grupę, której członkiem jest użytkownik. Mieliśmy też dość płytką hierarchię. Niestety nie może być więcej pomocy. – dash