0

When I run the code below in a virtual machine then I'm getting the following exception on the .Get() function: Specified cast is not valid

For Each queryObj As ManagementObject In New ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard").Get()
    If queryObj("SerialNumber") Is Nothing Then
        Return "" 'If nothing then return string.empty
    Else
        Return CStr(queryObj("SerialNumber"))
    End If
Next
SJN
  • 377
  • 2
  • 8
  • 18
Gforse
  • 323
  • 3
  • 20
  • `return queryObj("SerialNumber")?.ToString()`. Note that `ManagementObject`/`ManagementBaseObject` are disposable. You need to call `queryObj.Dispose()` before returning a value or use a `try/finally` block or a `Using` statement. – Jimi Oct 11 '19 at 15:15
  • You should also be specific: `ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_BaseBoard")`. A `For Each` loop is also not necessary, since it will return a single object. Get the `FirstOrDefault()` item: `(...) ManagementObjectSearcher(...).Get().OfType(Of ManagementBaseObject)().FirstOrDefault()` (check for null). With WMI queries, a `Try/Catch/Finally` block is mandatory. – Jimi Oct 11 '19 at 15:22

0 Answers0