GetGroups()
получает все группы из доменов в одном лесу, поэтому я должен предположить, что два ваших домена не находятся в одном лесу, но доверяют друг другу.
Я не знаю, как сделать это с пространством имен AccountManagement
, но так вы бы поступили с DirectorySearcher
.
Когда учетные записи добавляются в группы на внешнем доверенном домене, они отображаются как объекты принципала внешней безопасности, которые содержат SID учетной записи. Вот что вам нужно искать. У вас уже есть учетная запись в переменной adUser
, поэтому я использую adUser.Sid
здесь.
Я предполагаю, что вы всегда будете искать другой домен, поэтому вы можете жестко закодировать distinguishedName
другого домена в первой строке.
var otherDomainDN = "DC=usa,domain,DC=com";
var ds = new DirectorySearcher(new DirectoryEntry($"LDAP://{otherDomainDN}"),
$"(&(objectClass=group)(member=CN={adUser.Sid},CN=ForeignSecurityPrincipals,{otherDomainDN}))");
ds.PropertiesToLoad.Add("cn");
var otherDomainGroups = new List<string>();
foreach (SearchResult g in ds.FindAll()) {
otherDomainGroups.Add(g.Properties["cn"][0].ToString());
}
После этого otherDomainGroups
будет список имен других групп.