我的C#代码有问题,我希望在一个特定的组下显示所有组,名为L_P001xxx。
我最终想要的是从组L_P001xxx开始,我希望显示所有组,直到级别3和级别3,我想只显示用户。
我认为我必须通过递归解决这个问题,但它没有按预期工作。
现在我得到的是:
该组的第一个成员,称为A96XYZ,然后是该组的第一个用户,但之后它被卡住了,我不知道为什么。
这是我的错误消息:
{"Unknown name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))"}
这是我的代码:
namespace ADQuery
{
class Program
{
static void Main(string[] args)
{
DirectoryEntry root = new DirectoryEntry(String.Format("WinNT://{0},Computer", "10.18.6.9"), null, null, AuthenticationTypes.Secure);
DirectoryEntry admGroup = root.Children.Find("L_P00142W", "group");
DoForEveryNode(admGroup);
}
static void DoForEveryNode(DirectoryEntry de)
{
object members = de.Invoke("members", null);
foreach (object groupMember in (IEnumerable)members)
{
DirectoryEntry member = new DirectoryEntry(groupMember);
Console.WriteLine(member.Name);
DoForEveryNode(member);
}
}
}
}
答案 0 :(得分:0)
我做了一些工作,现在我可以阅读每个小组的用户,但仍然有一个小问题。
我有这个组L_P00142W
,并且该组有一个名为L_ext_P00142W
的域本地组,而我无法访问此组。
所有其他小组不再是我要读的问题,但这个小组总是被忽略。 也许有人知道我能做什么或应该做什么?这是我的代码:
namespace ADQuery
{
class Program
{
static void Main(string[] args)
{
//GetUserLocalGroups("L_P00142", "10.18.6.9", "s-gruppe");
DirectoryEntry root = new DirectoryEntry(String.Format("WinNT://{0},Computer", "ip-address"), null, null, AuthenticationTypes.Secure);
DirectoryEntry admGroup = root.Children.Find("L_P00142W", "group");
DoForEveryNode(admGroup);
}
static void DoForEveryNode(DirectoryEntry de)
{
if (de.SchemaClassName == "Group")
{
object members = de.Invoke("members", null);
foreach (object groupMember in (IEnumerable)members)
{
DirectoryEntry member = new DirectoryEntry(groupMember);
if (member.SchemaClassName == "User")
Console.WriteLine("I am a user: " + member.Name);
else
{
Console.WriteLine("I am a group: " + member.Name);
DoForEveryNode(member);
}
}
Console.ReadLine();
}
}
}
}