正如标题所提到的,我需要一种方法来让所有群组成为ActiveDirectory的成员。
要使用户成为我使用的所有组
public static DirectoryEntry[] GetGroupsUserIsMemberOf(DirectoryEntry directoryEntry)
{
ArrayList groupsUserIsMemberOf = new ArrayList();
object groups = null;
DirectoryEntry[] userGroupEntries = null;
if (directoryEntry != null && directoryEntry.SchemaClassName == "user") {
groups = directoryEntry.Invoke("Groups", null);
foreach (object group in (IEnumerable)groups) {
groupsUserIsMemberOf.Add(new DirectoryEntry(group));
}
userGroupEntries = (DirectoryEntry[])groupsUserIsMemberOf.ToArray(typeof(DirectoryEntry));
}
return userGroupEntries;
}
但是在尝试时
public static DirectoryEntry[] GetGroupsGroupIsMemberOf(DirectoryEntry directoyEntry)
{
ArrayList groupsGroupIsMemberOf = new ArrayList();
object groups = null;
DirectoryEntry[] groupEntry = null;
if (directoyEntry != null && directoyEntry.SchemaClassName == "group") {
groups = directoyEntry.Invoke("Groups", null); // throws exception (see below)
foreach (object group in (IEnumerable)groups) {
groupsGroupIsMemberOf.Add(new DirectoryEntry(group));
}
groupEntry = (DirectoryEntry[])groupsGroupIsMemberOf.ToArray(typeof(DirectoryEntry));
}
return groupEntry;
}
让所有组成为该行的成员
groups = directoyEntry.Invoke("Groups", null); // throws exception (see below)
抛出异常:
"Unknown name. (exception HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))"
有人知道一个高效的方法来让一个群组成为其中的所有群组吗?
答案 0 :(得分:4)
想想我自己得到了它:
要获得所有群组成员,您可以使用
directoryEntry.Properties["memberOf"][0]
并获得一个字符串对象,其中包含您的组所属的所有ADObject。
将其拆分为单个AD-Object字符串,检查是否得到了组。
答案 1 :(得分:2)
此代码将为您提供当前登录用户的组列表,它比查询域控制器的信息更快,因为它来自缓存的安全标识符:
WindowsIdentity currentIdent = WindowsIdentity.GetCurrent();
IdentityReferenceCollection currentGroups = currentIdent.Groups;
List<String> groups = new List<string>();
foreach (IdentityReference indentity in currentGroups)
{
groups.Add(indentity.Translate(typeof(NTAccount)).ToString());
}