You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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(无需安装):

  1. 下载NirCmd并保存为nircmd.exe到本地目录
  2. 执行以下命令设置音量:
# (可选)将目标设备设为默认录音设备
nircmd setdefaultsounddevice "VoiceMeeter Output" 1
# 设置音量为100%
nircmd setrecordingvolume "VoiceMeeter Output" 100

关于你之前尝试方案的问题说明
  • WMI类失效:Win32_PerfRawData_Counters_AudioEndpoint是性能监控类,仅用于读取数据,且依赖特定性能计数器启用状态,无法用于修改音量。
  • AudioDeviceCmdlets限制:该模块核心功能是切换默认设备,未内置音量调整命令,无法直接实现需求。

内容的提问来源于stack exchange,提问作者Roukmoute

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:16:02