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.
À voir également : Le Top 10 Des boulets sur Facebook
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
Bonjour Poichou,
Le message d’erreur indiquerait que tu n’as pas ajouter de status.
Exemple : .bluetooth.ps1 -BluetoothStatus Off
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 !
Exacte ! l’utilité de la commande est vraiment pour les automatisations que ce soit par le biais de macro ou autres programmes