在进行网络管理和资源共享时,通常会将多台电脑连接到同一个电脑工作组中,以实现文件、打印机等资源的共享。如果需要获取电脑工作组下的所有电脑名称,C#提供了多种方法来实现这一功能。本文将介绍两种常用的方法:使用DirectorySearcher类和WMI服务。
方法一:使用DirectorySearcher类
DirectorySearcher是System.DirectoryServices命名空间中的一个类,它提供了便捷的搜索和查询目录服务的功能。可以利用这个类来获取电脑工作组下的电脑名称。下面是使用DirectorySearcher类的代码示例:
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
// 获取当前域得到Domain实例
Domain domain = Domain.GetCurrentDomain();
DirectoryEntry root = domain.GetDirectoryEntry();
// 搜索工作组下的电脑
DirectorySearcher searcher = new DirectorySearcher(root);
searcher.Filter = "(&(objectClass=computer)(objectCategory=computer))";
searcher.SearchScope = SearchScope.Subtree;
searcher.PropertiesToLoad.Add("name");
foreach (SearchResult result in searcher.FindAll())
{
Console.WriteLine(result.Properties["name"][0].ToString());
}
在上述代码中,首先使用Domain获取当前域的实例,然后创建一个DirectoryEntry对象表示根部分。接下来,使用DirectorySearcher类的对象来搜索电脑工作组下的电脑。为了过滤不必要的结果,使用"(&(objectClass=computer)(objectCategory=computer))"过滤器,指定只返回计算机对象。最后,输出所有搜索结果的名称。
方法二:使用WMI服务
WMI是Windows Management Instrumentation(Windows管理规范)的缩写,它提供了广泛的管理和监控功能。可以使用WMI服务来获取电脑工作组下的电脑名称。下面是使用WMI服务的代码示例:
using System.Management;
// 使用WMI服务
ManagementScope ms = new ManagementScope("\\\\.\\root\\cimv2");
ObjectQuery oq = new ObjectQuery("SELECT * FROM Win32_ComputerSystem");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(ms, oq);
ManagementObjectCollection mof = searcher.Get();
foreach (ManagementObject mo in mof)
{
Console.WriteLine(mo["Name"]);
}
在上述代码中,使用ManagementScope类来表示WMI服务,然后构造ObjectQuery对象以执行查询。创建一个ManagementObjectSearcher对象,用于搜索Win32_ComputerSystem的所有实例。最后,输出每个实例的名称属性。