从我的网络位置获取计算机名称

3
我想知道是否有一种方法可以使用C#获取在我的网络位置中显示的所有计算机名称。

1
重复问题:https://dev59.com/CVXTa4cB1Zd3GeqP6v2i - david.s
甚至包括那个显然是从https://dev59.com/xnE85IYBdhLWcg3w432o#2562302复制的。 - Joshua Drake
3个回答

3
您将需要使用NetServerEnum() API。我不认为在基础的.NET库中有此API的托管包装器,但是我通过快速谷歌搜索找到了这个:http://www.codeproject.com/Articles/16113/Retreiving-a-list-of-network-computer-names-using 注意:我没有测试或仔细审查过codeproject代码,但如果有任何问题,它应该足以作为您需要开始的起点。
编辑:除非您确定处于域环境,否则请勿使用DirectoryServices。System.DirectoryServices类是一个ADSI包装器,如果没有要查询的Active Directory,则无法工作。NetServerEnum()适用于工作组和域,但并不能保证得到最可靠的数据(可能不会显示所有机器)。它依赖于计算机浏览器服务。
最好的解决方案可能是一个同时包含两种可能性并合并结果的类 :/

这可能是一个非常愚蠢的问题,但是,直接执行“net view>computerListing.txt”,使用StreamReader读取它,并解决它,难道不更容易吗? - Steffen Winkler
非常感谢!你的解释真的帮助我理解了! - Kay Lee

3
这个可以运行,但需要一些时间。:/
public List<String> ListNetworkComputers()
{
    List<String> _ComputerNames = new List<String>();
    String _ComputerSchema = "Computer";
    System.DirectoryServices.DirectoryEntry _WinNTDirectoryEntries = new System.DirectoryServices.DirectoryEntry("WinNT:");
    foreach (System.DirectoryServices.DirectoryEntry _AvailDomains in _WinNTDirectoryEntries.Children) {
        foreach (System.DirectoryServices.DirectoryEntry _PCNameEntry in _AvailDomains.Children) {
            if (_PCNameEntry.SchemaClassName.ToLower().Contains(_ComputerSchema.ToLower())) {
            _ComputerNames.Add(_PCNameEntry.Name);
            }
        }
    }
    return _ComputerNames;
}

2

根据用户的权限,应用程序可能会或可能不会获取这些信息。

尝试使用ActiveDirectory。这应该可以为您提供有关本地网络的精确信息。

使用System.DirectoryServices。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接