Eine so einfache Aufgabe, würde man sagen, und ich habe keine befriedigende Lösung gefunden. Was ich versucht habe (mit Musik über einen Bluetooth-verbundenen Lautsprecher, um den Zustand des Radios wirklich zu kennen):
- mit devcon als admin:
devcon disable USB\VID_8087&PID_07DC&REV_0001
(das ist die HW-ID meines Bluetooth-Adapters) ... erfordert einen Neustart, um zu funktionieren ... - Verwenden von Powershell als Administrator:
Disable-NetAdapter "Bluetooth Network Connection 3"
(das ist die Übersetzung des Namens meines Bluetooth-Adapters) ... Der PAN-Treiber wird deaktiviert, aber ein Bluetooth-Lautsprecher spielt weiterhin Musik ab. - Verwenden von net als Admin:
net stop bthserv
... schaltet das Radio nicht aus (BT-Lautsprecher spielt weiterhin Musik ab) - Verwenden von .NET: Die relevanteste Seite in MSDN sagt nichts über das Ein- und Ausschalten des Adapters aus.
- Explorer verwenden:
ms-settings:bluetooth
oderexplorer.exe %LocalAppData%\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\cs-CZ\AAA_SettingsPagePCSystemBluetooth.settingcontent-ms
... öffnet das Bluetooth-Einstellungsfeld, aber ich muss immer noch auf den Umschalter klicken
Ich kann nicht glauben, dass Microsoft so unwissend wäre, einen solchen Befehl nicht bereitzustellen ...
windows
windows-10
command-line
bluetooth
Martin Pecka
quelle
quelle
Antworten:
Dies ist aufgrund der erforderlichen Interoperation mit WinRT eine Herausforderung, aber in reiner PowerShell ist Folgendes möglich:
Um es zu verwenden, speichern Sie es als PS1-Datei, z
bluetooth.ps1
. Wenn Sie dies noch nicht getan haben, befolgen Sie die Anweisungen im Abschnitt "Aktivieren von Skripten" des PowerShell-Tag-Wikis , um die Ausführung von Skripten auf Ihrem System zu aktivieren. Dann können Sie es an einer PowerShell-Eingabeaufforderung wie folgt ausführen:Um Bluetooth auszuschalten, übergeben Sie
Off
stattdessen.So führen Sie es aus einer Batchdatei aus:
Vorsichtsmaßnahme: Wenn der Bluetooth-Supportdienst nicht ausgeführt wird, versucht das Skript, ihn zu starten, da WinRT andernfalls keine Bluetooth-Funkgeräte erkennt. Leider kann der Dienst nicht gestartet werden, wenn das Skript nicht als Administrator ausgeführt wird. Um dies unnötig zu machen, können Sie den Starttyp dieses Dienstes in "Automatisch" ändern.
Nun zur Erklärung. Die ersten drei Zeilen legen die Parameter fest, die das Skript verwendet. Bevor wir ernsthaft beginnen, stellen wir sicher, dass der Bluetooth-Support-Dienst ausgeführt wird, und starten ihn, falls nicht. Anschließend laden
System.Runtime.WindowsRuntime
wir die Assembly, damit wir mit derWindowsRuntimeSystemExtensions.AsTask
Methode Aufgaben im WinRT-Stil (die .NET / PowerShell nicht versteht) in .NET konvertieren könnenTask
. Diese bestimmte Methode verfügt über eine Schiffsladung verschiedener Parametersätze, die die Überlastungsauflösung von PowerShell auszulösen scheinen. In der nächsten Zeile erhalten wir die spezifische Methode, die nur eine erfolgreiche WinRT-Aufgabe übernimmt. Anschließend definieren wir eine Funktion, die wir mehrmals verwenden, um ein Ergebnis des entsprechenden Typs aus einer asynchronen WinRT-Task zu extrahieren. Nach der Deklaration dieser Funktion laden wir zwei notwendige Typen aus WinRT-Metadaten. Der Rest des Skripts ist so ziemlich nur eine PowerShell-Übersetzung des C # -Codes, den Sie in Ihrer Antwort geschrieben haben. Es verwendet dieRadio
WinRT-Klasse zum Suchen und Konfigurieren des Bluetooth-Funkgeräts.quelle
$bluetooth
auf Null gesetzt, wodurch die vorletzte Zeile diesen Fehler verursacht.$radios
? Daraufhin wird die Liste der von WinRT zurückgegebenen Radios angezeigt.rfkill unblock bluetooth
unter Linux :-DNachdem ich aufgegeben hatte, nach vorgefertigten Lösungen zu suchen, stellte ich fest, dass die Universal Windows Platform-Apps Zugriff auf die Funksteuerungs-API haben .
Daher habe ich eine Beispiel-Funksteuerungs-App mit einer befehlszeilengesteuerten App zusammengeführt. Das Ergebnis ist hier: https://github.com/peci1/RadioControl . Es ist im Windows Store veröffentlicht .
Im Allgemeinen ist es nicht möglich, die App nur im Hintergrund laufen zu lassen. Sie müssen daher zuerst die GUI starten und können sie dann wie folgt über die Befehlszeile aufrufen
Die Kernfunktionen, die diese App benötigt, sind:
Dann müssen Sie auch die Radios-Funktion zum App-Manifest hinzufügen:
Um die Steuerung über die
protected override async void OnActivated(IActivatedEventArgs args)
Befehlszeile zu ermöglichen, müssen Sie die Methode in App.xaml.cs überschreiben und die Verarbeitung in einer Verzweigung wie der folgenden ausführen:quelle
Disable/Enable-NetAdapter
? superuser.com/questions/1444278/...Dieses Autohotkey-Skript scheint den Trick zu tun. Das stört mich,
Sleep
aber es scheint, dass das Fenster aktiv wird, bevor es zum Empfang meiner Tastatureingaben bereit ist.Crossposting an /programming//q/48700268/308851, um herauszufinden, durch was das ersetzt werden
Sleep 300
könnte.quelle
Hier ist eine Teillösung:
wmic path Win32_PNPEntity where "caption like '%bluetooth%' AND DeviceID like 'USB\\%'" call disable
Lässt den Bluetooth-Ein- / Ausschalter auf jeden Fall verschwinden und der Geräte-Manager meldet diesThis device is disabled. (Code 22)
. Ob das ausreicht, um das Radio auszuschalten, weiß ich nicht.Ich kann keine Dokumentation zu den
call
akzeptierten Argumenten finden . Ich denke, es sollte eine Artrfkill
hier geben.quelle
enable
wird die Bluetooth-Wiedergabe nicht fortgesetzt. Die Dokumentation zur PNPEntity-Klasse finden Sie hier: msdn.microsoft.com/en-us/library/aa394353(v=vs.85).aspx , aber es scheinen keine anderen nützlichen Methoden vorhanden zu sein ...Mit DevManView können Sie ein Gerät über die Befehlszeile mit folgender Syntax aktivieren / deaktivieren:
Es erlaubt auch die Verwendung von Platzhaltern mit dem
/use_wildcard
Argument.quelle
Powershell verfügt über Cmdlets, mit denen Sie genau das tun können, wonach Sie suchen:
https://gallery.technet.microsoft.com/PowerShell-Device-60d73bb0
Verwenden Sie Get-Device, um eine Liste der Geräte abzurufen. Sie können das Where-Objekt weiterleiten, um Ihr Gerät auszuwählen, und dann an Disable-Device (Gerät deaktivieren) oder Enable-Device (Gerät aktivieren) weiterleiten.
Detaillierte Anleitung...
Laden Sie die Datei herunter und entpacken Sie sie.
Starte eine PowerShell als Admin.
Ändern Sie ggf. die Ausführungsrichtlinie:
Importieren Sie das Modul:
Wenn Sie die Liste der Geräte eingrenzen müssen, können Sie einen ähnlichen Vergleich durchführen:
Wenn Sie den genauen Namen kennen, können Sie mit -eq (gleich) vergleichen:
Hände an der Hose abwischen.
quelle
wmic
kann das auch, denke ich zumindest.Disable-Device : Error calling SetupDiCallClassInstaller
. Ich führe sie als Administrator und mit uneingeschränkter Ausführungsrichtlinie aus.Ich habe ein Batch-Skript erstellt, das einen Registrierungsschlüsselwert überprüft, der nur vorhanden wäre, wenn Ihr Bluetooth-Radio aktiviert wäre. Anschließend ruft es das oben stehende Powershell-Skript von Ben N mit dem richtigen Parameter auf, um den aktuellen Status zu ändern. Verwandelt es in eine Umschaltverknüpfung, anstatt es separat aktivieren und deaktivieren zu müssen.
quelle
Das Ausführen des folgenden Befehls über die Eingabeaufforderung (als Administrator) hat den Trick ausgeführt:
Ich hatte zuvor denselben Befehl zum Deaktivieren meines Wi-Fi-Adapters verwendet und festgestellt, dass er auch mit den anderen Adaptern funktioniert: Systemsteuerung> Netzwerk und Internet> Netzwerkverbindungen. Ändern Sie einfach das Argument "name" in den Namen Ihres Adapters. Sie können es auch wieder aktivieren, indem Sie das letzte Argument in ändern
admin=enabled
.quelle