我想知道是否有一种方法可以使用 C# 获取出现在我的网络位置中的所有计算机名称。
问问题
9147 次
3 回答
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;
}
于 2012-04-19T20:35:23.703 回答
3
您将需要使用 NetServerEnum() API。我不相信基础 .NET 库中有一个托管包装器,但我可以通过快速的谷歌搜索找到它:http: //www.codeproject.com/Articles/16113/Retreiving-a-list-of -网络计算机名称使用
注意:我没有测试或彻底审查过代码项目代码,但如果有任何问题,它应该足以满足您的需求。
编辑:除非您确定域环境,否则不要使用 DirectoryServices。System.DirectoryServices 类是一个 ADSI 包装器,无需 Active Directory 即可查询。NetServerEnum() 适用于工作组和域,但不保证最可靠的数据(并非所有机器都可能出现)。它依赖于计算机浏览器服务。
最好的解决方案可能是一个包含两种可能性并合并结果的类:/
于 2012-04-19T20:35:42.183 回答
2
取决于用户的许可,应用程序可能会或可能不会获得这些信息。
尝试使用 ActiveDirectory。这应该可以为您提供有关本地网络的准确信息。
使用 System.DirectoryServices。
于 2012-04-19T20:39:02.727 回答