如何在 Windows 上使用 PowerShell 获取蓝牙设备电池百分比?

问题描述 投票:0回答:5

我正在尝试绘制蓝牙耳机电池放电图表。为此,我需要读取所连接设备的电池百分比。我可以在设备的 GUI 上看到电源信息。有没有办法使用 PowerShell 获取连接的蓝牙设备的电池百分比信息? (比如使用 wmi 或其他任何东西)

windows powershell bluetooth wmi battery
5个回答
6
投票

根据我的发现,您可以使用 Get-PnpDevice cmdlet 获取有关蓝牙设备的信息。这应该返回 PnP 设备及其状态、类、FriendlyName 和 InstanceID 的列表。

Get-PnpDevice

您可以使用-Class参数过滤结果。要指定蓝牙 PnP 设备,您可以输入“Bluetooth”作为 -Class 参数的字符串值。

Get-PnpDevice -Class 'Bluetooth'

然后,您可以使用 -FriendlyName 参数通过其FriendlyName 从此列表中指定您想要的设备,并输入所需设备的FriendlyName 作为参数的字符串值。

Get-PnpDevice -Class 'Bluetooth' -FriendlyName 'Device FriendlyName'

注意:您还可以使用 -InstanceId 参数指定设备,并将设备的 InstanceId 作为参数的字符串值提供。

如果您随后将上一个命令通过管道传递给 Get-PnpDeviceProperty cmdlet,它将返回设备属性的列表,包括其 InstanceId、KeyName、Type 和 Data。

Get-PnpDevice -Class 'Bluetooth' -FriendlyName 'Device FriendlyName' |
    Get-PnpDeviceProperty

除此之外,我还可以通过使用 -KeyName 参数并输入(我假设)包含设备电源数据的属性的 KeyName 作为参数的字符串值来进一步过滤命令的结果。

Get-PnpDevice -Class 'Bluetooth' -FriendlyName 'Device FriendlyName' |
    Get-PnpDeviceProperty -KeyName 'PropertyKeyName'

不幸的是,这就是我所能解决的问题。希望我的贡献有帮助。


1
投票

据我所知,除了使用 Get-WmiObject 获得的数据外,没有其他方法可以轮询蓝牙设备数据,因为 Windows 设置 -> 蓝牙设备中看到的电池状态来自供应商/设备驱动程序,并且似乎到目前为止,PowerShell 无法访问,除非有一些我不知道的奇异管理单元。

您可以通过此命令获取所有可能的设备信息:

 Get-WmiObject -Query "select * from win32_PnPEntity" | Where Name -like "MyDeviceName"

或者,如果您现在不确定设备的命名方式,这将返回“设备”的完整列表:

 Get-WmiObject -Query "select * from win32_PnPEntity" | Select Name

此外,我在注册表中找不到电池信息 - 也许有更多知识的人可以对此进行扩展,因为注册表可能包含必要的信息,因为它必须存储在设备上的某个位置。


1
投票

Paulo Amaral 的上述评论确实是答案。

下面的代码将为您提供一个可重复使用的命令来查询设备的电池状态:

Get-PnpDevice -FriendlyName "*<Device Name>*" | ForEach-Object {
    $local:test = $_ |
    Get-PnpDeviceProperty -KeyName '{104EA319-6EE2-4701-BD47-8DDBF425BBE5} 2' |
        Where Type -ne Empty;
    if ($test) {
        "To query battery for $($_.FriendlyName), run the following:"
        "    Get-PnpDeviceProperty -InstanceId '$($test.InstanceId)' -KeyName '{104EA319-6EE2-4701-BD47-8DDBF425BBE5} 2' | % Data"
        ""
        "The result will look like this:";
        Get-PnpDeviceProperty -InstanceId $($test.InstanceId) -KeyName '{104EA319-6EE2-4701-BD47-8DDBF425BBE5} 2' | % Data
    }
}

对于我的

<Headset>
设备,输出看起来类似于:

To query battery for <Headset>, run the following:
Get-PnpDeviceProperty -InstanceId 'BTHENUM\{0000####-0000-####-####-############}_VID&########_PID&####\#&########&#&############_#########' -KeyName '{104EA319-6EE2-4701-BD47-8DDBF425BBE5} 2'

The result will look like this:
90

0
投票

看来这个解决方案对来这里的人很少见。
它没有给我想要的结果。我正在使用 Jabra 的耳机。
我在不同的电池电量下收集了这整组数据。
对我来说不幸的是,我没有得到一个值反映电池百分比的KeyName
我没有看到列表中的任何其他值根据 GUI 中显示的电池百分比发生变化。

我的KeyName设置如下:

 {2BD67D8B-8BEB-48D5-87E0-6CDA3428040A} 4
 {3464F7A4-2444-40B1-980A-E0903CB6D912} 10
 {3B2CE006-5E61-4FDE-BAB8-9B8AAC9B26DF} 8
 {80497100-8C73-48B9-AAD9-CE387E19C56E} 6
 {83DA6326-97A6-4088-9453-A1923F573B29} 10
 {83DA6326-97A6-4088-9453-A1923F573B29} 15
 {83DA6326-97A6-4088-9453-A1923F573B29} 17
 {83DA6326-97A6-4088-9453-A1923F573B29} 3
 {A35996AB-11CF-4935-8B61-A6761081ECDF} 12
 {A8B865DD-2E3D-4094-AD97-E593A70C75D6} 26

微软本身正在读取这些数据,这就是他们在通知中显示数据的方式。
微软准备好为这些重要信息推出更容易的阅读机制了吗?


0
投票

我开始关注蓝牙课程。事实证明,我的蓝牙耳机将电池信息存储在系统类的设备中。我找到了一种过滤方法来找到正确的设备,基本上就像 Lockzsmith 一样。就像对于 Jabra 设备一样,您可以这样做:

Get-PnpDevice -FriendlyName '*jabra*' | Select-Object Class,FriendlyName,@{L="Battery";E={(Get-PnpDeviceProperty -DeviceID $_.PNPDeviceID -KeyName '{104EA319-6EE2-4701-BD47-8DDBF425BBE5} 2').Data}}
© www.soinside.com 2019 - 2024. All rights reserved.