如何在Windows11的PowerShell或命令行将麦克风音量设为100%?
原生PowerShell实现方案(无第三方工具)
可以通过调用Windows Core Audio的COM组件直接操控录音设备音量,以下是可运行的脚本:
# 定义Core Audio相关COM接口 Add-Type -TypeDefinition @" using System; using System.Runtime.InteropServices; [Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] interface IMMDeviceEnumerator { void EnumAudioEndpoints(int dataFlow, int stateMask, out IMMDeviceCollection devices); void GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice device); } [Guid("0BD7A1BE-7A1A-44DB-8397-CC5392387B5E")] interface IMMDeviceCollection { void GetCount(out int count); void Item(int index, out IMMDevice device); } [Guid("A95664D2-9614-4F35-A746-DE8DB63617E6")] interface IMMDevice { void Activate(ref Guid iid, int dwClsCtx, IntPtr pActivationParams, out object ppInterface); void GetId(out string id); } [Guid("F8679F50-850A-41CF-9C72-430F290290C8")] interface IAudioEndpointVolume { void SetMasterVolumeLevelScalar(float fLevel, Guid pguidEventContext); void GetMasterVolumeLevelScalar(out float pfLevel); } class AudioController { public static IAudioEndpointVolume GetRecordingDeviceVolume(string deviceName) { var enumerator = (IMMDeviceEnumerator)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("BCDE0395-E52F-467C-8E3D-C4579291692E"))); enumerator.EnumAudioEndpoints(1, 0x00000001, out IMMDeviceCollection devices); devices.GetCount(out int deviceCount); for (int i = 0; i < deviceCount; i++) { devices.Item(i, out IMMDevice device); device.GetId(out string deviceId); // 激活音量控制接口 var volumeGuid = typeof(IAudioEndpointVolume).GUID; device.Activate(ref volumeGuid, 0x00000010, IntPtr.Zero, out object volumeObj); var volumeControl = (IAudioEndpointVolume)volumeObj; // 通过WMI匹配设备名称 var wmiQuery = $"SELECT Name FROM Win32_SoundDevice WHERE PNPDeviceID LIKE '%{deviceId.Replace(@"\", @"\\")}%'"; foreach (var dev in new System.Management.ManagementObjectSearcher(wmiQuery).Get()) { if (dev["Name"].ToString().Equals(deviceName, StringComparison.OrdinalIgnoreCase)) { return volumeControl; } } } return null; } } "@ -Language CSharp # 配置目标设备和音量(1.0对应100%,0.0对应0%) $targetDevice = "VoiceMeeter Output" $targetVolume = 1.0 # 获取设备音量控制器并设置 $volumeController = [AudioController]::GetRecordingDeviceVolume($targetDevice) if ($volumeController) { $volumeController.SetMasterVolumeLevelScalar($targetVolume, [Guid]::Empty) Write-Host "已将 '$targetDevice' 音量设置为 $($targetVolume * 100)%" } else { Write-Host "未找到目标录音设备: $targetDevice" }
注意:脚本需要以管理员权限运行,否则可能无法访问音频设备的COM接口。
轻量工具替代方案:NirCmd
如果原生脚本过于繁琐,可使用单文件命令行工具NirCmd(无需安装):
- 下载NirCmd并保存为
nircmd.exe到本地目录 - 执行以下命令设置音量:
# (可选)将目标设备设为默认录音设备 nircmd setdefaultsounddevice "VoiceMeeter Output" 1 # 设置音量为100% nircmd setrecordingvolume "VoiceMeeter Output" 100
关于你之前尝试方案的问题说明
- WMI类失效:
Win32_PerfRawData_Counters_AudioEndpoint是性能监控类,仅用于读取数据,且依赖特定性能计数器启用状态,无法用于修改音量。 - AudioDeviceCmdlets限制:该模块核心功能是切换默认设备,未内置音量调整命令,无法直接实现需求。
内容的提问来源于stack exchange,提问作者Roukmoute
相关产品推荐
相关产品推荐

