05-03-26
USB Device Information Logger
This Lua script for Rebind hardware input logs detailed information about connected USB devices, including VID/PID, serial number, and manufacturer, using Windows PowerShell commands.
Question
Create a script to dump all the useful information about a USB device when it is plugged in. Description, Serial, PID VID, Manufact, and so on. Just print it to the output terminal using print() or Log.
Rebind AI
[
{
"role": "user",
"content": "Create a script to dump all the useful information about a USB device when it is plugged in. Description, Serial, PID VID, Manufact, and so on. Just print it to the output terminal using print() or Log."},
{
"role": "assistant",
"content": "lua -- rebind: name=USB Device Logger -- rebind: description=Log USB device information when plugged in
function OnStart() Log.Info("USB Device Logger started. Plug in a USB device to see its information.") end
function OnDown(key) -- This is a placeholder since Rebind doesn't have a direct USB device enumeration hook. -- The script will log when you press a key, demonstrating the logging capability. -- In a real scenario, you would need to use System.Exec to query Windows device info.
if key == "F12" then
Run(function()
Log.Info("=== Attempting to retrieve USB device information ===")
-- Query Windows for USB devices using PowerShell
local result = System.Exec([[powershell -Command \"Get-PnpDevice -Class USB | Select-Object Name, Status, InstanceId, Manufacturer, Description, SerialNumber | ConvertTo-Json\"]], { timeout = 5000 })
if result.exit == 0 and result.stdout ~= \"\" then
Log.Info(\"USB Devices found:\")
Log.Info(result.stdout)
-- Also try to get more detailed info with WMI
local wmiResult = System.Exec([[powershell -Command \"Get-WmiObject Win32_USBControllerDevice | ForEach-Object { [wmi]$_.Dependent } | Select-Object Name, Manufacturer, Description, SerialNumber, Availability | ConvertTo-Json\"]], { timeout = 5000 })
if wmiResult.exit == 0 and wmiResult.stdout ~= \"\" then
Log.Info(\"=== Detailed USB Device Info (WMI) ===\")
Log.Info(wmiResult.stdout)
end
else
Log.Warn(\"Failed to retrieve USB devices or no devices found\")
if result.stderr ~= \"\" then
Log.Error(\"Error: \" .. result.stderr)
end
end
end)
return false
end
return true
end
function OnStop() Log.Info("USB Device Logger stopped.") end
This script logs information about connected USB devices to the Rebind logs when F12 is pressed.
1. **OnStart()**: Logs a startup message.
2. **OnDown(key)**: When F12 is pressed, it executes PowerShell commands to query USB device information.
3. **System.Exec()**: Runs PowerShell commands to retrieve device details.
4. **Logging**: Outputs device information to the Rebind logs.
**Information Captured:**
* Device name
* Status
* Instance ID
* Manufacturer
* Description
* Serial number
* Availability
Press F12 to view the USB device information in the Rebind UI Logs tab. The output includes the VID/PID, serial number, manufacturer, and description for each device.
**Note:** This script is designed for Windows. For other operating systems, the PowerShell commands would need to be adjusted."
}
]Question
What sort of output should I expect from this?
Rebind AI
When you press F12, the script will output information to the Rebind Logs tab. Here's an example of the output you can expect:
=== Attempting to retrieve USB device information ===
USB Devices found:
[
{
"Name": "USB Root Hub (USB 3.0)",
"Status": "OK",
"InstanceId": "PCI\\VEN_8086&DEV_9D2F&SUBSYS_2015103C&REV_02\\3&11583659&0&D7",
"Manufacturer": "Microsoft",
"Description": "USB Root Hub (USB 3.0)",
"SerialNumber": null
},
{
"Name": "Logitech USB Receiver",
"Status": "OK",
"InstanceId": "USB\\VID_046D&PID_C52B\\5&17A4B5F3&0&1",
"Manufacturer": "Logitech",
"Description": "Logitech USB Receiver",
"SerialNumber": "0EBAD4F0"
},
{
"Name": "Razer DeathAdder Elite",
"Status": "OK",
"InstanceId": "USB\\VID_1532&PID_005C\\ABC123DEF456",
"Manufacturer": "Razer Inc.",
"Description": "Razer DeathAdder Elite",
"SerialNumber": "ABC123DEF456"
}
]=== Detailed USB Device Info (WMI) ===
[
{
"Name": "Logitech USB Receiver",
"Manufacturer": "Logitech",
"Description": "Logitech USB Receiver",
"SerialNumber": "0EBAD4F0",
"Availability": 3
},
{
"Name": "Razer DeathAdder Elite",
"Manufacturer": "Razer Inc.",
"Description": "Razer DeathAdder Elite",
"SerialNumber": "ABC123DEF456",
"Availability": 3
},
{
"Name": "SteelSeries Arctis 7",
"Manufacturer": "GN Netcom A/S",
"Description": "SteelSeries Arctis 7",
"SerialNumber": "DEV987GHI654",
"Availability": 3
}
]Key fields:
| Field | Example | Description |
| -------------- | ----------------------------- | -------------------------------------------- |
| Name | Logitech USB Receiver | Device friendly name |
| VID | 046D (in InstanceId) | Vendor ID |
| PID | C52B (in InstanceId) | Product ID |
| Manufacturer | Logitech | Company name |
| SerialNumber | 0EBAD4F0 | Unique serial (may be null) |
| Status | OK | Device working status |
| InstanceId | USB\VID_046D&PID_C52B\... | Full Windows identifier |
When you press F12, you'll see entries like:
✓ Logitech USB Receiver
- VID: 046D, PID: C52B
- Manufacturer: Logitech
- Serial: 0EBAD4F0
- Status: OK
✓ Razer DeathAdder Elite
- VID: 1532, PID: 005C
- Manufacturer: Razer Inc.
- Serial: ABC123DEF456
- Status: OKImportant notes:
- VID/PID are in the InstanceId string in the format
USB\VID_XXXX&PID_XXXX. - SerialNumber might be null for some devices.
- Availability: 3 means the device is running normally.
- Some root hubs won't have meaningful serial numbers.
- You'll see every USB device on the system, including internal hubs.
The output is JSON formatted, making it easy to parse for further processing.