【问题标题】:Powershell - Find all USB GamepadsPowershell - 查找所有 USB 游戏手柄
【发布时间】:2020-08-06 14:31:45
【问题描述】:

在 Windows 10 中,如果我转到控制面板 --> 设备和打印机,顶行会显示“设备”在我的情况下,这些包括“USB 游戏手柄”、“2.4G 鼠标”等

如何使用 Powershell 查询此设备列表?我想检查一个名为“USB Gamepad”的设备是否连接到PC。

到目前为止,我已经通过设备管理器路线如下,但无法获得我需要的信息:

$devs = Get-PnPDevice -Class HIDClass | where { $_.HardwareID.Contains("HID_DEVICE_SYSTEM_GAME") }

foreach ($d in $devs){
    echo $d.FriendlyName
    echo $d.DeviceID
    echo $d.HardwareID
    echo $d.Name
    echo $d.Class
    echo ""
    echo ""
}

看来我可以对注册表@Computer\HKEY_CURRENT_USER\System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick中的信息做点什么

【问题讨论】:

  • 把这个和我的回答分开。注意点: --- 公认的最佳实践是注意: --- 单引号用于简单字符串,双引号用于变量扩展,以及其他多引号用例。 --- 简单的屏幕输出不需要 echo(又名 Write-Host 的别名)。除非您另有说明,否则输出到屏幕是 PowerShell 默认值。 --- Write-Host 仅在少数用例中需要。 --- 1 - Colorizewd 屏幕文本输出 --- 2 - 一些格式化案例。 --- 但选择始终取决于个人,因为我们都有自己的风格和习惯。

标签: powershell windows-10


【解决方案1】:

这...

Get-PnPDevice -Class HIDClass | 
where { $_.HardwareID.Contains("HID_DEVICE_SYSTEM_GAME") }

...如果语法不正确,应该是这样...

... 
where { $PSItem.HardwareID -Contains ...}

比较运算符没有点符号。

我会将该行重构为...

Clear-Host
Get-PnPDevice -Class HIDClass | 
ForEach {
    $PSItem | 
    Where-Object {$PSItem.HardwareID -match 'HID_DEVICE'} | 
    Select-Object -Property FriendlyName, DeviceID, HardwareID, Name, Class
    "`n`n"
} 
# Results
<#
...
FriendlyName : HID-compliant consumer control device
DeviceID     : HID\VID_17A0&PID_0305&MI_03\B&345E789C&0&0000
HardwareID   : {HID\VID_17A0&PID_0305&REV_0207&MI_03, HID\VID_17A0&PID_0305&MI_03, HID\VID_17A0&UP:000C_U:0001, HID_DEVICE_SYSTEM_CONSUMER, 
               HID_DEVICE_UP:000C_U:0001, HID_DEVICE}
Name         : HID-compliant consumer control device
Class        : HIDClass
...
#>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    相关资源
    最近更新 更多