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

如何用WinRT API编写PowerShell脚本控制WiFi或蓝牙开关?

用PowerShell通过WinRT API控制WiFi/蓝牙无线电状态

我编写了一款PowerShell脚本,借助Windows.Devices.Radios命名空间与WinRT API,可在Windows系统中以编程方式启用或禁用WiFi或蓝牙无线电。脚本已处理WinRT API的异步特性,能流畅完成无线电状态切换。

实现代码

# 加载WinRT相关组件
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]

function Await($WinRtTask, $ResultType) {
    $asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
    $netTask = $asTask.Invoke($null, @($WinRtTask))
    $netTask.Wait(-1) | Out-Null
    $netTask.Result
}

# 获取指定类型的无线电
function Get-Radio {
    param(
        [Parameter(Mandatory=$true)]
        [Windows.Devices.Radios.RadioKind]$RadioKind
    )
    $radiosOperation = [Windows.Devices.Radios.Radio]::GetRadiosAsync()
    $radios = Await $radiosOperation ([System.Collections.Generic.IReadOnlyList[Windows.Devices.Radios.Radio]])
    return $radios | Where-Object { $_.Kind -eq $RadioKind }
}

# 切换无线电状态
function Set-RadioState {
    param(
        [Parameter(Mandatory=$true)]
        [Windows.Devices.Radios.Radio]$Radio,
        [Parameter(Mandatory=$true)]
        [Windows.Devices.Radios.RadioState]$TargetState
    )
    if ($Radio.State -eq $TargetState) {
        Write-Host "无线电已处于$TargetState状态"
        return
    }
    $operation = $Radio.SetStateAsync($TargetState)
    Await $operation ([Windows.Devices.Radios.RadioAccessStatus])
    Write-Host "无线电状态已切换至$TargetState"
}

# 示例:禁用WiFi
$wifiRadio = Get-Radio -RadioKind WiFi
if ($wifiRadio) {
    Set-RadioState -Radio $wifiRadio -TargetState Disabled
} else {
    Write-Host "未找到WiFi无线电设备"
}

# 示例:启用蓝牙
$bluetoothRadio = Get-Radio -RadioKind Bluetooth
if ($bluetoothRadio) {
    Set-RadioState -Radio $bluetoothRadio -TargetState Enabled
} else {
    Write-Host "未找到蓝牙无线电设备"
}

关键说明

  • 异步处理:通过自定义Await函数将WinRT的异步操作转换为同步等待,解决PowerShell对WinRT异步API的兼容问题
  • 权限要求:脚本需要以管理员权限运行,否则可能无法修改无线电状态
  • 状态判断:切换前会检查当前状态,避免重复操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:52:42