我正在尝试以编程方式在数据库服务器上查询WMI以查找SAN WWN号码。我正在使用WMI名称空间root \ wmi和类MSFC_FibrePortHBAAttributes。我的问题是我可以访问此类的Attributes属性,但我无法深入到该属性中以获取MSFC_FibrePortHBAAttributes.Attributes.PortWWN
值。
在PowerShell中,查询如下(使用索引,因为有多个):
PS C:\Users\e21013> (Get-WmiObject MSFC_FibrePortHBAAttributes -Namespace root\wmi)[0].attributes | select portwwn
portwwn
-------
{99, 1, 1, 1...}
但是,我的任务是在C#中执行此操作。例如,在相关类MSFC_FCAdapterHBAAttributes中,我可以通过以下方式使用C#查询HBA驱动程序名称:
// Special method to abstract out WMI queries in root\wmi namespace
// query is: "select * from MSFC_FCAdapterHBAAttributes"
private void printSANData(String query)
{
ManagementScope scope = new ManagementScope(@"root\wmi");
scope.Connect();
List<PropertyData> valueList = new List<PropertyData>();
SelectQuery selectQuery = new SelectQuery(query);
ManagementObjectSearcher searcher = new
ManagementObjectSearcher(scope, selectQuery);
ManagementObjectCollection information = searcher.Get();
try
{
foreach (ManagementObject obj in information)
{
foreach (PropertyData property in obj.Properties)
{
if (property.Name.ToString().Equals("DriverName"))
{
string hbaDriver = "nothing";
hbaDriver = property.Value.ToString();
Console.WriteLine("DriverName: " + hbaDriver);
}
}
}
}
catch (ManagementException)
{
Console.Write("Server not SAN attached.");
}
searcher.Dispose();
}
这给了我:&#34; DriverName:elxstor,&#34;一个司机名。凉。
但是,当我想使用相同的查询逻辑和方法来查询MSFC_FibrePortHBAAttributes类来查询MSFC_FibrePortHBAAttributes.Attributes.portwwn
时,我被卡住了,因为属性是System.Management.ManagementBaseObject
而我无法理解如何深入钻取物体以获得它的基础属性。
如果我尝试:
if (property.Name.ToString().Equals("Attributes"))
{
string hbaAttribute = "nothing";
hbaAttribute = property.Value.ToString();
Console.WriteLine("Value: " + hbaAttribute);
}
我得到:&#34;价值:System.Management.ManagementBaseObject&#34;并且for循环中的属性变量没有任何成员可以沿WMI路径走得更远。
非常感谢任何帮助。如果需要进一步澄清,请告诉我,谢谢。