Skip to main content

How to List All Plug and Play Devices in a Batch Script

A Plug and Play (PnP) device is any piece of hardware that Windows can automatically detect and configure without requiring manual setup. This includes virtually every component in a modern computer, from USB drives and graphics cards to internal system devices. For system inventory, diagnostics, and troubleshooting, a script often needs to get a list of all these hardware devices and their current status.

This guide will teach you how to get a comprehensive list of all PnP devices using the powerful, built-in WMIC (Windows Management Instrumentation) command. You will learn the correct query to use, how to filter the list to find specific devices, and how to create a practical script to report on any devices that are in an error state.

danger

CRITICAL NOTE: Querying detailed hardware information is a privileged operation. For the most complete and accurate results, your script must be run with full administrator privileges.

The Core Command: WMIC PNPENTITY

The WMIC (Windows Management Instrumentation Command-line) utility is the definitive tool for querying system hardware from a script. The PNPENTITY alias provides direct access to the Win32_PnPEntity WMI class, which represents every single Plug and Play device recognized by the operating system.

Command: WMIC PNPENTITY GET Caption,DeviceID,Status

  • PNPENTITY: The WMI class for PnP devices.
  • GET ...: Specifies the properties you want to display.

Basic Example: A Simple List of All Devices

Running the basic WMIC command gives you a formatted table of all detected hardware. This list will be very long.

@ECHO OFF
ECHO --- Querying all Plug and Play devices ---
ECHO This list will be very long.
ECHO.
PAUSE

WMIC PNPENTITY GET Caption,Status

REM Pipe to 'more' to make the long list readable page by page
REM WMIC PNPENTITY GET Caption,Status | more

The command produces a table with the device's friendly name and its current status. (Output is heavily truncated)

Caption                                                 Status
High Definition Audio Controller OK
NVIDIA GeForce RTX 3080 OK
Intel(R) Ethernet Controller (3) I225-V OK
USB Mass Storage Device OK
...

Parsing the Output with FOR /F for Scripting

To use this information in a script, you need to process the output line by line. The FOR /F loop is the standard tool for this.

For example, this script iterates through each device and prints its caption.

@ECHO OFF
ECHO --- Iterating through each PnP device ---
ECHO.

REM The 'skip=1' ignores the header line of the WMIC output.
FOR /F "skip=1 tokens=*" %%D IN ('WMIC PNPENTITY GET Caption') DO (
IF NOT "%%D"=="" ECHO Found Device: "%%D"
)
note

The IF NOT "%%D"=="" is used to filter out extra blank lines that WMIC sometimes produces.

Key WMIC PNPENTITY Properties Explained

You can GET many useful properties from the PNPENTITY class:

PropertyDescription
CaptionThe friendly name of the device (e.g., "NVIDIA GeForce RTX 3080").
NameUsually the same as Caption.
DeviceIDA unique string that identifies the device, often containing vendor (VEN) and device (DEV) IDs.
StatusThe current status of the device (e.g., OK, Error, Disabled).
ManufacturerThe name of the device manufacturer.
ClassGuidA GUID that identifies the class of the device (e.g., Display, Network, USB).
PresentA boolean (TRUE/FALSE) indicating if the device is currently connected/present.

Common Pitfalls and How to Solve Them

  • Administrator Rights: For the most reliable and complete hardware information, you must run the script as an Administrator. A standard user may not have the rights to query the full hardware list.

  • Very Long Output: The list of all PnP devices is huge, as it includes virtual and internal system components.

    • Solution: Filter the list. Instead of parsing the whole list with findstr (which is inefficient), it's much better to use WMIC's own WHERE clause to filter at the source.
    REM This is faster and cleaner than piping to findstr.
    WMIC PNPENTITY WHERE "Caption LIKE '%%NVIDIA%%'" GET Caption,Status
  • Understanding the Status: The Status field is key for diagnostics. A value of OK means the device is working properly. Any other value (like Error, Degraded, or Disabled) indicates a potential issue.

Practical Example: A Script to Find Problem Devices

This is a classic diagnostic script. It queries WMIC and asks it to return only the devices that are not in an "OK" state. This is a very fast way to find any hardware with errors or that has been disabled.

@ECHO OFF
SETLOCAL
ECHO --- Searching for Problematic PnP Devices ---
ECHO This script will list any devices not in a normal 'OK' state.
ECHO.
SET "FoundProblems=0"

REM The 'WHERE "Status<>'OK'"" clause is the key. <> means "not equal to".
REM Use /FORMAT:LIST for a clean, readable output for each problem device.
FOR /F "tokens=*" %%A IN (
'WMIC PNPENTITY WHERE "Status<>'OK'" GET Caption,Status,DeviceID /FORMAT:LIST'
) DO (
ECHO %%A
SET "FoundProblems=1"
)

IF %FoundProblems% EQU 0 (
ECHO [SUCCESS] No problem devices were found. All devices report 'OK'.
)

ENDLOCAL

Conclusion

The WMIC PNPENTITY command is the standard and most powerful built-in tool for listing all Plug and Play hardware devices from a batch script.

  • The core command is WMIC PNPENTITY GET <Properties>.
  • Use a WHERE clause to efficiently filter the results at the source (e.g., WHERE "Status<>'OK'").
  • Use a FOR /F loop to parse the output and use the device information in your script.
  • Always run your script as an Administrator for accurate and complete results.

By using this WMIC query, you can easily automate the process of hardware inventory and system diagnostics.