Search code examples
sqlbatch-filevbscriptcmdwql

VBScript to check driver status with WQL query


I'm trying to write a script that will check if a device is currently at an error level (has a yellow bang in Device Manager). The ultimate task I'm trying to automate is installing a driver, checking if it installed correctly, uninstalling, and then checking again to verify that it uninstalled. I've got most of that figured out but I am having trouble with the WQL query. I can query if any drivers have an error level other than 0, and I can query if any drivers have a specific device ID, but when I try to do both it fails with "drivertest.vbs(4,1) Microsoft VBSCript runtime error: type mismatch: '[string: "Select * from Win32_"]' This is the code I have:

strComputer = "."
Set objWMIService = GetObject(_
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_PnPEntity " _
        & "WHERE ConfigManagerErrorCode <> 0" AND "WHERE objItem.DeviceID = 'acpi\int33d6'")
For Each objItem in colItems
    Wscript.Echo "Class GUID: " & objItem.ClassGuid
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "Manufacturer: " & objItem.Manufacturer
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
    Wscript.Echo "Service: " & objItem.Service
Next

Solution

  • Try this. I think your problem is the backslash. Those must be escaped in WQL. Note the double backslash in acpi\\int33d6.

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_PnPEntity WHERE ConfigManagerErrorCode<>0 AND DeviceID='acpi\\int33d6'")
    
    For Each objItem In colItems
        Wscript.Echo "Class GUID: " & objItem.ClassGuid
        Wscript.Echo "Description: " & objItem.Description
        Wscript.Echo "Device ID: " & objItem.DeviceID
        Wscript.Echo "Manufacturer: " & objItem.Manufacturer
        Wscript.Echo "Name: " & objItem.Name
        Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
        Wscript.Echo "Service: " & objItem.Service
    Next