Как включить и выключить Bluetooth на Win10 при запуске

Как включить и выключить Bluetooth на Win10 при запуске

У меня ноутбук с Win10, который я таскаю туда-сюда между домом и работой. Я использую одинаковые, но разные мыши Bluetooth в каждом месте. Каждый раз, когда я меняю место (и, таким образом, меняю мыши Bluetooth), мне приходится заходить в Настройки, чтобы выключить и снова включить "переключатель" Bluetooth, чтобы ноутбук подключился к новой мыши (хотя она отображается как уже "сопряжённая" в списке устройств Bluetooth). Обратите внимание, что это происходит даже при перезагрузках.

Конечно, моей первой мыслью автоматизировать этот процесс было просто использовать скрипт для отскока служб(ы) bluetooth во время загрузки, чтобы эмулировать выключение и повторное включение переключателя bluetooth на странице настроек. Но, похоже, мне не удается определить правильную службу (если это вообще правильный подход) для переключения. Я использовал powershell для остановки "bthserv" и "ibtsiva", но моя мышь по-прежнему прекрасно работает, так что, очевидно, это не эквивалентно выключению переключателя bluetooth.

PS C:\WINDOWS\system32> get-service -DisplayName *Bluetooth*

Status   Name               DisplayName
------   ----               -----------
Stopped  BluetoothUserSe... Bluetooth User Support Service_3b07...
Stopped  BTAGService        Bluetooth Audio Gateway Service
Stopped  bthserv            Bluetooth Support Service
Stopped  ibtsiva            Intel Bluetooth Service

Есть ли еще какая-то служба, которую мне следует переключить? Или служба просто совершенно не подходит? Принудительное выключение оборудования и его повторный запуск срабатывают каждый раз, так что это определенно включает в себя все действия, которые мне нужно выполнить. Мне просто нужно найти способ автоматизировать это. Есть какие-нибудь указания?

решение1

См. этот раздел вопросов и ответов…

Включение/выключение Bluetooth-радио/адаптера из cmd/powershell в Windows 10

[CmdletBinding()] 
Param 
(
    [Parameter(Mandatory=$true)][ValidateSet('Off', 'On')][string]$BluetoothStatus
)

If ((Get-Service bthserv).Status -eq 'Stopped') 
{ Start-Service bthserv }

Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() `
| ? { $_.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
}

[Windows.Devices.Radios.Radio,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null

[Windows.Devices.Radios.RadioAccessStatus,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
Await ([Windows.Devices.Radios.Radio]::RequestAccessAsync()) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null

$radios = Await ([Windows.Devices.Radios.Radio]::GetRadiosAsync()) ([System.Collections.Generic.IReadOnlyList[Windows.Devices.Radios.Radio]])
$bluetooth = $radios | ? { $_.Kind -eq 'Bluetooth' }

[Windows.Devices.Radios.RadioState,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
Await ($bluetooth.SetStateAsync($BluetoothStatus)) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null

Связанный контент