PowerShell 获取具有最大属性值的注册表项

标签 powershell audio registry

我想创建一个 PowerShell 脚本来在两个音频输出(耳机和扬声器)之间切换,而不必在系统托盘中多次单击。

我从这个项目开始:Powershell-Default-Audio-Device-Changer

我了解到注册表路径"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\*"包含所有输出音频设备(“渲染”)。其中每个都有一个“DeviceState”属性。如果“DeviceState”= 1,则音频设备可供使用。某些条目具有“Level:0”、“Level:1”属性。由于某种原因,Windows 似乎会在您切换音频设备时增加这些值。 Windows 对“Level:0”值添加时间戳并查找最新的时间戳。 Reddit discussion

所以我想返回最大“Level:0”值的设备ID。不幸的是,我是一个 PowerShell 新手,尽管付出了数小时的努力,但仍无法弄清楚如何完成这项工作。

这就是我现在所拥有的。它返回所有可用的音频输出设备,并拒绝仅提供最大“Level:0”的设备。如何让“Where-Object”发挥作用?

Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\*" |
Where-Object {
    (Get-ItemPropertyValue $_.PSPath DeviceState) -eq 1
 } | 
Where-Object {
    (Get-ItemPropertyValue -Path $_.PSPath -Name "Level:0") -eq ($_ | Measure-Object -Property Level:0 -Maximum).Maximum
} |
Format-List

另外...尝试在 VSCode 中调试它。似乎任何产生错误的 Watch 都要求我重新启动 PowerShell 终端......呃。还有人遇到这样的问题吗?

最佳答案

这有帮助吗?

Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\*"
 | where DeviceState -eq 1 | sort Level:0 | select -ExpandProperty PSChildName -Last 1

关于PowerShell 获取具有最大属性值的注册表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69714559/

相关文章:

powershell - 如何在管道中使用 “if”语句

windows - 删除特定图像的终止容器

android - 嵌入的mp3在Phonegap应用中不起作用

c# - 注册设备特定的自动播放处理程序

windows - 是否有一个 Windows 注册表 "dictionary"可以解释整个(或大部分)Windows 注册表?

java - 如何使用 JNA winreg 写入 Windows 注册表?

date - 如何使用 Powershell 根据最新日期从日志文件中提取最新行

windows - 将整个脚本输出重定向到文件并同时在控制台中显示

ios - 静音/静音模式打开时声音仍在播放

python - 使用python通过fft进行频谱图