Link to home
Start Free TrialLog in
Avatar of GCPSlanops
GCPSlanopsFlag for United States of America

asked on

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!
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

Open in new window

Avatar of ajnt__
ajnt__
Flag of United Kingdom of Great Britain and Northern Ireland image

Hi GCPSlanops,

Can you post the whole exception please including line number?

Also you could change your first "Dim mScope" line to the below to help split out sections of the code to find the bug.
Dim sScopeQuery AS String = "\\" & sName & "\root\PG_Internal"
Dim mScope As New ManagementScope(sScopeQuery, options)

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of GCPSlanops
GCPSlanops
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial