9

我创建的以下方法似乎不起作用。foreach 循环总是发生错误。

NotSupportedException 未处理...提供程序不支持搜索,无法搜索 WinNT://WIN7,computer。

我正在查询本地机器

 private static void listUser(string computer)
 {
        using (DirectoryEntry d= new DirectoryEntry("WinNT://" + 
                     Environment.MachineName + ",computer"))
        {
           DirectorySearcher ds = new DirectorySearcher(d);
            ds.Filter = ("objectClass=user");
            foreach (SearchResult s in ds.FindAll())
            {

              //display name of each user

            }
        }
    }
4

2 回答 2

20

您不能将 aDirectorySearcherWinNT提供程序一起使用。从文档中:

使用DirectorySearcher对象通过轻量级目录访问协议 (LDAP) 搜索和执行针对 Active Directory 域服务层次结构的查询。LDAP 是系统提供的唯一支持目录搜索的 Active Directory 服务接口 (ADSI) 提供程序。

相反,使用该DirectoryEntry.Children属性访问您的 object 的所有子对象Computer然后使用该SchemaClassName属性查找属于 objects 的子User对象

使用 LINQ:

string path = string.Format("WinNT://{0},computer", Environment.MachineName);

using (DirectoryEntry computerEntry = new DirectoryEntry(path))
{
    IEnumerable<string> userNames = computerEntry.Children
        .Cast<DirectoryEntry>()
        .Where(childEntry => childEntry.SchemaClassName == "User")
        .Select(userEntry => userEntry.Name);

    foreach (string name in userNames)
        Console.WriteLine(name);
}       

没有 LINQ:

string path = string.Format("WinNT://{0},computer", Environment.MachineName);

using (DirectoryEntry computerEntry = new DirectoryEntry(path))
    foreach (DirectoryEntry childEntry in computerEntry.Children)
        if (childEntry.SchemaClassName == "User")
            Console.WriteLine(childEntry.Name);
于 2011-11-19T05:10:49.247 回答
-1

以下是获取本地计算机名称的几种不同方法:

string name = Environment.MachineName;
string name = System.Net.Dns.GetHostName();
string name = System.Windows.Forms.SystemInformation.ComputerName;
string name = System.Environment.GetEnvironmentVariable(“COMPUTERNAME”);

下一个是获取当前用户名的方法:

string name = System.Windows.Forms.SystemInformation.UserName;
于 2016-09-08T04:57:13.107 回答