我试图构建一个机器上所有本地组和每个组中所有用户的列表。
这是我正在使用的代码
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)
{ }
}
这在IIS8.1服务器上的ASP.NET中工作得很好。
我试图使用VisualStudio2017将其转换为命令行可执行文件,使用.NET 4.6.1使用C#将其转换为命令行可执行文件,但它不会编译,即使编译后也不会找到组成员。
当我将相同的代码粘贴到Visual 'GetEnumerator'项目中时,它会为foreach (object userG in (IEnumerable)computerGroupEntry.Invoke("Members"))
提供错误信息,错误消息错误CS1579 foreach语句不能对'IEnumerable‘类型的变量进行操作,因为'IEnumerable’不包含公共实例定义的foreach (object userG in (IEnumerable)computerGroupEntry.Invoke("Members"))
foreach (object userG in computerGroupEntry.Properties["Members"])
,它会编译,但在运行时却找不到任何属性“`Members”
那么,为什么代码在ASP.NET上工作,但是C#可执行文件却看不到组的任何用户Members
(都运行在同一台机器上)?
另外,如果有人知道为什么会在.NET中抛出一个错误,但是在ASP.NET中工作。
发布于 2020-06-04 06:58:35
您发布的代码在控制台应用程序(它是可执行的)中为我工作,在VS 2019中有目标.NET框架4.6.1。如有下列参考资料,请核实。
using System.Collections;
using System.Collections.Generic;
(IEnumerable)computerGroupEntry.Invoke("Members")
需要System.Collections
我提供了组“管理员”,并且能够检索"wsAdmin“、”域管理员“。
https://stackoverflow.com/questions/62185192
复制相似问题