我想創建一個 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 討論
所以我想回傳最大“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 終端......呃。其他人有這樣的問題嗎?
uj5u.com熱心網友回復:
這有幫助嗎?
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\*"
| where DeviceState -eq 1 | sort Level:0 | select -ExpandProperty PSChildName -Last 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/338518.html
