簡體   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