Question : Trouble running wmi query from .NET

Good day,
Has anyone out there ever tried to run a remote WMI query for RAID levels of hard drives on IBM servers?
We run a hardware RAID on our servers using LSI controllers. These controllers report to the IBM director agent running on the servers. IBM director installs a set of CIM tools to query information about the hardware. I found the IBM manual that details the classes available here : http://publib.boulder.ibm.com/infocenter/dirinfo/toolkit/index.jsp?topic=/com.ibm.director.sdk.t1.doc/director_environment.html
I am using a standard .NET managementObjectSerarcher to query the server. I have been able to successfully query the standard objects under the CIMV2 namespace but I haven't been able to crack the code so to speak on this namespace. I'm sure I am missing something. The code I am using is below. The class and namespace I am trying to query is in the code. I get an error saying 'Invalid Class'. Any Ideas?

Hopefully this is understandable!
Code Snippet:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
Public Shared Function getDrives(ByVal sName As String) As DataTable
        Dim options As New ConnectionOptions
        options.Impersonation = ImpersonationLevel.Impersonate
        options.Authentication = AuthenticationLevel.Packet
        Dim mScope As New ManagementScope("\\" & sName & "\root\PG_Internal", options)
        ' The documentation notes that this namespace is installed with IBM director also
        'Dim mScope As New ManagementScope("\\" & sName & "\root\PG_InterOp", options)
        ' And this one
        'Dim mScope As New ManagementScope("\\" & sName & "\root\IBMSD", options)
        ' This is the class that the documentation contains the information I want
        Dim mQuery As New SelectQuery("SELECT * FROM IBMPSG_RAIDDiskDrive")
        Dim mSearcher As New ManagementObjectSearcher(mScope, mQuery)
 
        ' build the datatable
        Dim mPropertiesTable As New DataTable
        Dim mPropertiesRow As DataRow
        Dim dcDriveLetter As New DataColumn("Letter", GetType(String))        mPropertiesTable.Columns.Add(dcDriveLetter)
 
        Try
            mScope.Connect()
            ' Check the connection
            If mScope.IsConnected Then
                ' traverse through each record given
                For Each driveObj As ManagementObject In mSearcher.Get()
                    ' Create a new row for the datatable
                    mPropertiesRow = mPropertiesTable.NewRow
                    ' Traverse through the properties found...
                    For Each driveProperty In driveObj.Properties
                        ' Create the header row
                        If mPropertiesTable.Columns.Count <> driveObj.Properties.Count + 1 Then
                            Dim dcDriveProperty As New DataColumn(driveProperty.Name, GetType(String))
                            mPropertiesTable.Columns.Add(dcDriveProperty)
                        End If
                        ' Get the property value
                        mPropertiesRow(driveProperty.Name) = driveProperty.Value
                    Next
                    ' Add the row
                    mPropertiesTable.Rows.Add(mPropertiesRow)
                Next
            End If
            ' Return the datatable
            Return mPropertiesTable
        Catch ex As Exception
            ' Return a datatable showing the exception
            mPropertiesRow = mPropertiesTable.NewRow()
            mPropertiesRow("Letter") = ex.Message.ToString & "[" & System.Security.Principal.WindowsIdentity.GetCurrent().Name & "]"
            mPropertiesTable.Rows.Add(mPropertiesRow)
            Return mPropertiesTable
        End Try
    End Function

Answer : Trouble running wmi query from .NET

ajnt,
Thanks for the reply. I understand why you ask for that but I have singled the problem out to the class that is being called. I am not calling it right apparently. Using the exact syntax I can successfully query any standard Win32 class from root\cimv2. When I change the query to root\IBMSD, i can query certain classes and get results. So, it isn't necessarily the syntax of the query. The error I get is when the query runs (line 12) and it simply states 'Invalid Class'. I assume that is because the class doesn't exist but according to the documentation from IBM, the class I am looking for [IBMPSG_RaidDiskDrive] should exist in one of the three namespaces [IBMSD, PG_InterOp, or PG_Internal] but as of yet I cannot find it. I even downloaded the WMI object browser and looked for the class on the server I am querying. I haven't seen it... I do actually have a support contract with IBM for IBM director so I might need to contact them...
Random Solutions  
 
programming4us programming4us