为什么本地 Windows 7 Pro 机器无法读取自己的 WMI 值?
Why can't local Windows 7 Pro machine read its own WMI values?
作为更大的 .Net 4.0 程序的一部分,我有一段查询 WMI 的网络适配器列表,并从中创建一个列表<> 具有 MAC 地址的物理适配器。
它在我试过的机器上工作,但是当发送到客户端时,列表是空的。如果他们在命令提示符下 运行 IPCONFIG /ALL
,则会列出 MAC。
我的第一个想法是存在阻止枚举的组策略,但到目前为止我发现的所有内容都指向影响通过防火墙进行远程访问的组策略。
我在本地以标准用户和管理用户身份尝试过,两者都提供相同的列表。
空查询不会产生异常。
我可以让他们去机器检查个人权限,但由于这似乎是一个团体问题,所以方向似乎是错误的。我错过了什么?
public static List<WmiNetworkInterfaceItem> QueryphysicalNetworkInterfaces()
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\CIMV2",
"SELECT * FROM Win32_NetworkAdapter");
List<WmiNetworkInterfaceItem> result = new List<WmiNetworkInterfaceItem>();
foreach (ManagementObject queryObj in searcher.Get()) {
if (queryObj["PhysicalAdapter"].Equals(true)) {
if (queryObj["AdapterTypeId"] != null) {
if (queryObj["AdapterTypeId"].ToString().Equals("0")) {
WmiNetworkInterfaceItem wmiNetworkInterfaceItem = new WmiNetworkInterfaceItem();
wmiNetworkInterfaceItem.Name = ManagementObjectPropertyString(queryObj["Name"]);
wmiNetworkInterfaceItem.MacAddress = ManagementObjectPropertyString(queryObj["MACAddress"]);
wmiNetworkInterfaceItem.PhysicalAdapter = queryObj["PhysicalAdapter"].Equals(true);
wmiNetworkInterfaceItem.AdapterType = ManagementObjectPropertyString(queryObj["AdapterType"]);
wmiNetworkInterfaceItem.AdapterTypeId = -1;
int.TryParse(ManagementObjectPropertyString(queryObj["AdapterTypeId"]), out wmiNetworkInterfaceItem.AdapterTypeId);
wmiNetworkInterfaceItem.Description = ManagementObjectPropertyString(queryObj["Description"]);
wmiNetworkInterfaceItem.PermanentAddress = ManagementObjectPropertyString(queryObj["PermanentAddress"]);
result.Add(wmiNetworkInterfaceItem);
}
}
}
}
return result;
}
按照用户 atp_09 在评论中的建议,使用 Windows 附带的 WBEMTest
实用程序,我能够让客户查询他的机器。在标准和管理用户帐户中使用此查询正好返回一个适配器,表明机器中没有任何东西阻止它工作。
SELECT * FROM Win32_NetworkAdapter where PhysicalAdapter = true
经过进一步审查,我后来用单一回复处理列表的方式出现了错误。
作为更大的 .Net 4.0 程序的一部分,我有一段查询 WMI 的网络适配器列表,并从中创建一个列表<> 具有 MAC 地址的物理适配器。
它在我试过的机器上工作,但是当发送到客户端时,列表是空的。如果他们在命令提示符下 运行 IPCONFIG /ALL
,则会列出 MAC。
我的第一个想法是存在阻止枚举的组策略,但到目前为止我发现的所有内容都指向影响通过防火墙进行远程访问的组策略。
我在本地以标准用户和管理用户身份尝试过,两者都提供相同的列表。
空查询不会产生异常。
我可以让他们去机器检查个人权限,但由于这似乎是一个团体问题,所以方向似乎是错误的。我错过了什么?
public static List<WmiNetworkInterfaceItem> QueryphysicalNetworkInterfaces()
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\CIMV2",
"SELECT * FROM Win32_NetworkAdapter");
List<WmiNetworkInterfaceItem> result = new List<WmiNetworkInterfaceItem>();
foreach (ManagementObject queryObj in searcher.Get()) {
if (queryObj["PhysicalAdapter"].Equals(true)) {
if (queryObj["AdapterTypeId"] != null) {
if (queryObj["AdapterTypeId"].ToString().Equals("0")) {
WmiNetworkInterfaceItem wmiNetworkInterfaceItem = new WmiNetworkInterfaceItem();
wmiNetworkInterfaceItem.Name = ManagementObjectPropertyString(queryObj["Name"]);
wmiNetworkInterfaceItem.MacAddress = ManagementObjectPropertyString(queryObj["MACAddress"]);
wmiNetworkInterfaceItem.PhysicalAdapter = queryObj["PhysicalAdapter"].Equals(true);
wmiNetworkInterfaceItem.AdapterType = ManagementObjectPropertyString(queryObj["AdapterType"]);
wmiNetworkInterfaceItem.AdapterTypeId = -1;
int.TryParse(ManagementObjectPropertyString(queryObj["AdapterTypeId"]), out wmiNetworkInterfaceItem.AdapterTypeId);
wmiNetworkInterfaceItem.Description = ManagementObjectPropertyString(queryObj["Description"]);
wmiNetworkInterfaceItem.PermanentAddress = ManagementObjectPropertyString(queryObj["PermanentAddress"]);
result.Add(wmiNetworkInterfaceItem);
}
}
}
}
return result;
}
按照用户 atp_09 在评论中的建议,使用 Windows 附带的 WBEMTest
实用程序,我能够让客户查询他的机器。在标准和管理用户帐户中使用此查询正好返回一个适配器,表明机器中没有任何东西阻止它工作。
SELECT * FROM Win32_NetworkAdapter where PhysicalAdapter = true
经过进一步审查,我后来用单一回复处理列表的方式出现了错误。