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



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

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

我了解到注册表路径"HKLM:SOFTWAREMicrosoftWindowsCurrentVersionMMDevicesAudioRender*"包含所有输出音频设备("render")。每一个都有一个DeviceState"财产。如果"DeviceState"= 1,音频设备可用。有些条目有"Level:0"、"Level:1";属性。由于某些原因,当你切换音频设备时,Windows似乎会增加这些。Windows时间戳"级别:0";值并查找最近的时间戳。Reddit讨论

所以我想返回最大值的设备ID"Level:0"价值。不幸的是,我是一个PowerShell新手,尽管花了几个小时的努力,还是不知道如何完成这个任务。

这是我现在拥有的。它返回所有可用的音频输出设备,拒绝只提供最大"电平:0"的设备。如何获得Where-Object"上班吗?

Get-ItemProperty "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionMMDevicesAudioRender*" |
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中调试。似乎任何产生错误的手表都需要我重新启动PowerShell终端…啊。还有人有这样的问题吗?

这有帮助吗?

Get-ItemProperty "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionMMDevicesAudioRender*"
| where DeviceState -eq 1 | sort Level:0 | select -ExpandProperty PSChildName -Last 1

最新更新