C#WMI查询:如何深入到对象类型System.Management.ManagementBaseObject?

时间:2015-02-14 00:20:39

标签: c# powershell wmi wmi-query wql

我正在尝试以编程方式在数据库服务器上查询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路径走得更远。

非常感谢任何帮助。如果需要进一步澄清,请告诉我,谢谢。

0 个答案:

没有答案