如何在Windows 11中用PowerShell获取已安装编解码器及媒体格式
在Windows 11中获取已安装编解码器及支持音视频格式的简便方案
问题说明
此前依赖Win32_VideoCodec、Win32_AudioCodec这类CIM类的PowerShell代码在Windows 11上会触发Get-CimInstance: Invalid query错误,原因是微软在Win11中移除了这些WMI类,编解码器信息不再通过该接口暴露,而是嵌入在ACM(音频压缩管理器)组件和相关DLL中,无法直接用简单命令提取。
替代方案
1. 用Windows Media Player快速生成支持列表
无需额外工具,系统自带功能即可导出完整信息:
- 打开Windows Media Player,点击顶部菜单栏的帮助 → 关于Windows Media Player
- 在弹出窗口中点击技术支持信息,系统会自动生成
wmpsupport.htm并在浏览器打开,里面包含所有已安装的音视频编解码器、支持的文件格式细节。
2. 基于注册表的PowerShell脚本(无需第三方工具)
Nirsoft的InstalledCodec工具核心是读取特定注册表路径,我们可以直接用PowerShell实现类似功能:
读取音频编解码器(ACM)
# 获取音频压缩管理器注册的编解码器信息 Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" | Where-Object { $_.Name -match '^.*audio.*codec$' } | Select-Object @{Name='Codec名称'; Expression={$_.GetValue($_.PSChildName)}}, @{Name='注册表路径'; Expression={$_.PSPath}}
读取DirectShow编解码器
# 获取DirectShow注册的音视频编解码器 $directShowPaths = @( "HKLM:\SOFTWARE\Classes\CLSID", "HKLM:\SOFTWARE\WOW6432Node\Classes\CLSID" ) foreach ($path in $directShowPaths) { Get-ChildItem $path -Recurse | Where-Object { $_.GetValue("FilterData") -ne $null -or $_.GetValue("Merit") -ne $null } | Select-Object @{Name='编解码器CLSID'; Expression={$_.PSChildName}}, @{Name='编解码器名称'; Expression={$_.GetValue("")}}, @{Name='注册表路径'; Expression={$_.PSPath}} }
注:DirectShow注册表项数量较多,脚本会过滤出带有编解码器特征的条目,若需更多细节,可结合
Get-ItemProperty进一步提取。
3. 用dxdiag导出系统诊断报告
Windows自带的DirectX诊断工具可导出包含编解码器的完整报告:
- 按下
Win + R输入dxdiag打开工具 - 点击保存所有信息,选择路径生成
DxDiag.txt,打开后在声音和显示板块下方可找到已安装的音视频编解码器列表。
总结
如果需要自动化获取,优先选择基于注册表的PowerShell脚本;如果只是快速查看,Windows Media Player的技术支持信息或dxdiag报告是更简便的选择,无需安装第三方工具。
内容的提问来源于stack exchange,提问作者not2qubit
相关产品推荐
相关产品推荐

