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

PowerShell脚本适配任意连接设备:如何通过Target实现?

实现PowerShell脚本在设备连接时自动生效的方案

是的,可以通过Windows任务计划程序(Task Scheduler)设置触发条件,让脚本在设备连接时自动执行。下面分两步解决问题:

第一步:修正现有脚本的问题

你的原始脚本存在两处关键错误,需要先修复才能正常工作:

  1. WMI查询使用AND逻辑,导致无法匹配任何设备(一个设备不可能同时包含多个不同名称),需改为OR;
  2. 用于设置默认设备的Marshal.WriteByte代码无效(写入空指针会引发错误),需替换为正确的设备设置逻辑。

修正后的脚本示例:

# 定义设置默认摄像头的函数
function Set-DefaultCamera {
    param([string]$cameraName)
    $camera = Get-PnpDevice -FriendlyName "*$cameraName*" -Class Camera | Where-Object { $_.Status -eq 'OK' }
    if ($camera) {
        # 提取设备GUID
        $guid = $camera.InstanceId.Split('\')[-1]
        # 修改注册表设置默认捕获设备
        Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows Media Foundation\Platform" -Name "DefaultCaptureDevice" -Value $guid
        Write-Host "默认摄像头已设置为: $cameraName"
    }
}

# 定义设置默认音频设备的函数
function Set-DefaultAudioDevice {
    param([string]$deviceName, [string]$deviceType) # deviceType可选值: Playback(扬声器)/Recording(麦克风)
    $deviceEnumerator = New-Object -ComObject MMDeviceEnumerator
    $activeDevices = $deviceEnumerator.EnumerateAudioEndpoints($deviceType, 1) # 1代表仅激活设备
    foreach ($device in $activeDevices) {
        if ($device.FriendlyName -like "*$deviceName*") {
            $device.SetDefault($deviceType)
            Write-Host "默认$deviceType设备已设置为: $deviceName"
            break
        }
    }
}

# 获取目标设备列表
$devices = Get-WmiObject -Query "SELECT * FROM Win32_PnPEntity WHERE (Name LIKE '%Logitech BRIO%' OR Name LIKE '%Phnx MT107a%')" | Where-Object { $_.Status -eq 'OK' }

# 遍历设备并设置默认值
foreach ($device in $devices) {
    $deviceName = $device.Name
    if ($deviceName -like '*Logitech BRIO*') {
        Set-DefaultCamera -cameraName 'Logitech BRIO'
    } elseif ($deviceName -like '*Phnx MT107a*') {
        Set-DefaultAudioDevice -deviceName 'Phnx MT107a' -deviceType 'Recording'
        Set-DefaultAudioDevice -deviceName 'Phnx MT107a' -deviceType 'Playback'
    }
}

第二步:通过任务计划程序设置触发条件

使用任务计划程序创建一个基于设备连接事件的任务,自动运行脚本:

  1. 打开任务计划程序(运行taskschd.msc);
  2. 创建新任务:
    • 常规选项卡:命名任务(如"设备连接时设置默认设备"),勾选"使用最高权限运行"(修改注册表和音频设置需要管理员权限);
    • 触发器选项卡:点击"新建",选择"事件"触发类型:
      • 日志选择Microsoft-Windows-PnPManager/Admin;
      • 源选择PnPManager;
      • 事件ID输入2003(该ID对应设备成功连接并识别的事件);
      • 若需仅针对特定设备触发,可点击"编辑筛选器"→"XML"标签,添加设备名称过滤(示例:*[EventData[Data[@Name='FriendlyName'] and Data='Logitech BRIO']]);
    • 操作选项卡:点击"新建",选择"启动程序":
      • 程序/脚本输入powershell.exe;
      • 添加参数:-ExecutionPolicy Bypass -File "C:\你的脚本路径\SetDefaultDevices.ps1"(替换为实际脚本路径);
    • 设置选项卡:勾选"错过计划启动时间后尽快运行任务",可根据需要调整任务超时时间;
  3. 保存任务,之后设备连接时脚本会自动执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:02:08