繁体   English   中英

DirectoryEntry 不返回 .NET 中的组成员,但在 ASP.NET 中有效

[英]DirectoryEntry not returning group members in .NET but works in ASP.NET

我正在尝试建立一个机器上所有本地组的列表以及每个组中的所有用户。

这是我正在使用的代码

foreach (string group in groups)
{
    try
    {
        using (DirectoryEntry computerGroupEntry = new DirectoryEntry(string.Format("WinNT://{0}/{1},group", Environment.MachineName, group)))
        {
            foreach (object userG in (IEnumerable)computerGroupEntry.Invoke("Members"))
            {
                DirectoryEntry user = new DirectoryEntry(userG);
                users.Add(group, user.Properties["Name"].Value.ToString());
            }
        }
    }
    catch (Exception)
    { }
}

这在 IIS 8.1 服务器上的 ASP.NET 中工作得很好。

我正在尝试使用 Visual Studio 2017 将其转换为命令行可执行文件,.NET 4.6.1 使用 C# 但它不会编译,即使在编译后也找不到组成员。

  1. 当我将相同的代码粘贴到 Visual Studio C# 项目中时,它给我foreach (object userG in (IEnumerable)computerGroupEntry.Invoke("Members"))错误消息

    错误 CS1579 foreach 语句无法对“IEnumerable”类型的变量进行操作,因为“IEnumerable”不包含“GetEnumerator”的公共实例定义

  2. 如果我将行更改为foreach (object userG in computerGroupEntry.Properties["Members"])它会编译但在运行时它找不到任何属性`Members

那么为什么代码在 ASP.NET 上运行,但 C# 可执行文件没有看到组的任何用户Members (都在同一台机器上运行)?

另外,如果有人知道为什么它在 .NET 中的 IEnumerable 语句会引发错误,但在 ASP.NET 中工作。

您发布的代码在 VS 2019 中具有目标 .NET 框架 4.6.1 的控制台应用程序(这是一个可执行文件)中按原样为我工作。请验证是否存在以下参考。

using System.Collections;
using System.Collections.Generic;

(IEnumerable)computerGroupEntry.Invoke("Members")需要System.Collections

我提供了“管理员”组,并且能够检索“wsAdmin”、“域管理员”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM