Ils se pourraient que ces articles t interessent plus que les autres

bluetooth headset

Powershell : Activer/désactiver le Bluetooth

Si vous cherchez un moyen d’activer ou désactiver votre Bluetooth avec powershell, j’ai peut-être une solution pour vous.


Il est bizarrement difficile de gérer des périphériques avec l’invite de commande ou Powershell sans passer par des programmes tiers.
On se demande même pourquoi ce n’est pas plus simple, est-ce une stratégie de Microsoft ? Bref, je vous explique comment faire.

Pour commencer, le seul moyen efficace “à mon avis” vient d’un utilisateur sur StackExchange, donc merci à toi pour cette solution.

1. Voici le programme en question :

[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

2. Pour l’utiliser, enregistrez-le dans un fichier PS1, par exemple. bluetooth.ps1.
Si vous ne l’avez pas déjà fait, suivez les instructions de l’ITQ05 pour activer l’exécution de scripts sur votre système.
Vous pouvez ensuite l’exécuter à partir d’une invite PowerShell comme ceci:

.\bluetooth.ps1 -BluetoothStatus On

Pour désactiver le Bluetooth, remplacer le statut par Off.

3. Pour l’exécuter à partir d’un fichier de commandes:

powershell -command .\bluetooth.ps1 -BluetoothStatus On

Avertissement : Si le service de support Bluetooth n’est pas en cours d’exécution, le script tente de le démarrer, car sinon, WinRT ne verra pas les radios Bluetooth. Hélas, le service ne peut pas être démarré si le script ne s’exécute pas en tant qu’administrateur. Pour rendre cela simple, vous pouvez changer le type de démarrage de ce service en automatique.

Bravo : Vous avez réussi ! Vous savez activer ou désactiver le bluetooth avec powershell.

Partagez cet article sur vos réseaux !

Je ne suis plus confiné, Fan de foot mais aussi des nouvelles geeks. On discute ici et on règle les comptes sur FIFA.

  • Poichou dit :

    Impossible d’appeler une méthode dans une expression Null.
    Au caractère C:UsersmeDownloadsbluetooth.ps1:19 : 1
    + Await ($bluetooth.SetStateAsync($BluetoothStatus)) ([Windows.Devices. …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation : (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

  • Julien dit :

    Très intéressant, mais l’utilité me semble limité en l’état. Sur les PC portable par exemple, une touche suffit à activer ou non le bluetooth.
    Mais peut on pousser la technique encore plus loin ? Je m’explique.
    Je dispose de deux enceintes bluetooth et d’un casque. J’aimerai lancer un script, par un raccourci clavier par exemple, ou via streamdeck, pour connecter tel ou tel périphérique. Ce serait super !

  • You don't have permission to register
    >