विंडोज 10 में cmd ​​/ शक्तियां से ब्लूटूथ रेडियो / एडाप्टर चालू / बंद करें


28

इस तरह के एक सरल कार्य, एक कहेंगे, और मुझे एक संतोषजनक समाधान नहीं मिला है। मैंने क्या कोशिश की है (एक ब्लूटूथ से जुड़े स्पीकर के माध्यम से संगीत बजाने के साथ वास्तव में रेडियो की स्थिति जानने के लिए):

  • व्यवस्थापक के रूप में devcon का उपयोग करना: devcon disable USB\VID_8087&PID_07DC&REV_0001(जो कि मेरे ब्लूटूथ एडेप्टर की HW ID है ...) को काम करने के लिए रिबूट की आवश्यकता होती है ...
  • व्यवस्थापक के रूप में पावरशेल का उपयोग करना: Disable-NetAdapter "Bluetooth Network Connection 3"(जो मेरे ब्लूटूथ एडाप्टर के नाम का अनुवाद है) ... यह पैन ड्राइवर को निष्क्रिय कर देता है, लेकिन एक ब्लूटूथ स्पीकर संगीत जारी रखता है ...
  • व्यवस्थापक के रूप में नेट का उपयोग करना: net stop bthserv... वास्तव में रेडियो बंद नहीं होता है (बीटी स्पीकर संगीत जारी रखता है)
  • .NET का उपयोग करना: MSDN पर सबसे अधिक प्रासंगिक पृष्ठ एडॉप्टर को चालू / बंद करने के बारे में एक शब्द नहीं कहता है।
  • एक्सप्लोरर का उपयोग करके: ms-settings:bluetoothया explorer.exe %LocalAppData%\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\cs-CZ\AAA_SettingsPagePCSystemBluetooth.settingcontent-ms... ब्लूटूथ सेटिंग्स पैनल खोलता है, लेकिन मुझे अभी भी टॉगल पर क्लिक करना है

मुझे विश्वास नहीं हो सकता है कि Microsoft इस तरह के आदेश को प्रदान नहीं करने के लिए बहुत अज्ञानी होगा ...


आप संगीत कैसे खेल रहे हैं?
harrymc

Winamp :) का उपयोग करना
मार्टिन पीका

क्या विंम्प को मारने से संगीत बंद हो जाता है?
21

बेशक, यह क्यों नहीं होगा? लेकिन सवाल संगीत प्लेबैक को रोकने के बारे में नहीं है, यह बीटी रेडियो के नियंत्रण के बारे में है।
मार्टिन पेका

1
@harrymc प्रश्न पढ़ें, कृपया। संगीत प्लेबैक सिर्फ एक तरीका है कि मैं कैसे पता लगाऊं कि ब्लूटूथ कनेक्शन जीवित है या नहीं। क्या मैं वास्तव में दिलचस्पी रखता हूं वास्तव में ब्लूटूथ एडाप्टर को अक्षम / सक्षम करने का एक तरीका है।
मार्टिन पेक्का

जवाबों:


21

WinRT के साथ आवश्यक व्यवधान के कारण यह चुनौतीपूर्ण है, लेकिन यह शुद्ध PowerShell में संभव है:

[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

इसका उपयोग करने के लिए, इसे सहेजें PS1 फ़ाइल, जैसे bluetooth.ps1। यदि आप पहले से ही नहीं हैं, तो अपने सिस्टम की स्क्रिप्ट के निष्पादन को सक्षम करने के लिए PowerShell टैग विकी के सक्षम अनुभाग में दिए गए निर्देशों का पालन करें । तो आप इसे इस तरह से एक PowerShell प्रॉम्प्ट से चला सकते हैं:

.\bluetooth.ps1 -BluetoothStatus On

ब्लूटूथ को बंद करने के लिए, Offइसके बजाय पास करें ।

इसे बैच फ़ाइल से चलाने के लिए:

powershell -command .\bluetooth.ps1 -BluetoothStatus On

कैविएट: यदि ब्लूटूथ सपोर्ट सर्विस नहीं चल रही है, तो स्क्रिप्ट इसे शुरू करने का प्रयास करती है क्योंकि अन्यथा, WinRT को ब्लूटूथ रेडियो नहीं दिखाई देगा। यदि स्क्रिप्ट स्क्रिप्ट व्यवस्थापक के रूप में नहीं चल रही है, तो सेवा प्रारंभ नहीं की जा सकती। उस अनावश्यक को बनाने के लिए, आप उस सेवा के स्टार्टअप प्रकार को स्वचालित में बदल सकते हैं।

अब कुछ स्पष्टीकरण के लिए। पहली तीन पंक्तियाँ स्क्रिप्ट के पैरामीटर को स्थापित करती हैं। बयाना में शुरुआत करने से पहले, हम यह सुनिश्चित करते हैं कि ब्लूटूथ सपोर्ट सर्विस चल रही है और यदि नहीं तो इसे शुरू करें। हम फिर System.Runtime.WindowsRuntimeअसेंबली को लोड करते हैं ताकि हम WindowsRuntimeSystemExtensions.AsTaskWinRT- शैली के कार्यों (जो .NET / PowerShell को समझ में न आए ) को .NET Tasks में बदलने के लिए विधि का उपयोग कर सकें । उस विशेष विधि में विभिन्न पैरामीटर सेटों का एक बोट लोड होता है जो पावरशेल के अधिभार रिज़ॉल्यूशन को ट्रिप करता प्रतीत होता है, इसलिए अगली पंक्ति में हमें वह विशिष्ट मिलता है जो केवल परिणामी WinRT कार्य को लेता है। फिर हम एक फ़ंक्शन को परिभाषित करते हैं जिसका उपयोग हम कई बार एक अतुल्यकालिक WinRT कार्य से उपयुक्त प्रकार का परिणाम निकालने के लिए करेंगे। उस फ़ंक्शन की घोषणा के बाद, हम WinRT मेटाडेटा से दो आवश्यक प्रकार लोड करते हैं। स्क्रिप्ट का शेष भाग आपके द्वारा अपने उत्तर में लिखे गए C # कोड का सिर्फ एक PowerShell अनुवाद है; यह Radioब्लूटूथ रेडियो को खोजने और कॉन्फ़िगर करने के लिए WinRT वर्ग का उपयोग करता है ।


1
आप अशक्त-भाव पर एक विधि नहीं कह सकते। C: \ Users \ chx \ AppData \ Local \ Microsoft \ WindowsApps \ bluetooth.ps1: 18 char: 1 + Await ($ bluetooth.SetStateAsync ($ BluetoothStatus)) ([Windows.evices)
chx

@chx क्या आपको यकीन है कि आपकी मशीन में ब्लूटूथ एडाप्टर है? यदि कोई ब्लूटूथ रेडियो नहीं है, तो तीसरी-से-अंतिम पंक्ति $bluetoothशून्य पर सेट हो जाएगी, जिससे दूसरी-से-अंतिम पंक्ति उस त्रुटि का उत्पादन करेगी।
बेन एन

मुझे 100% यकीन है कि यह "सेटिंग" ऐप में दिखाई दे रहा है और मैं वायरलेस तरीके से संगीत सुनता हूं और डिवाइस मैनेजर और विकी दोनों इसे रिपोर्ट भी करते हैं।
chx

@ एचएक्स एचएमएम, यदि आप अंतिम तीन लाइनों को सिर्फ साथ में रखते हैं तो आपको क्या मिलेगा $radios? यह रेडियो की सूची दिखाएगा कि WinRT वापस आ गया।
बेन एन

2
चतुर, यह काम करता है! मैं सिर्फ इस एपीआई का उपयोग करके एक डेस्कटॉप ऐप को संकलित करने के लिए नहीं मिल सकता था, लेकिन एक स्क्रिप्ट में इसे गतिशील रूप से लोड करना जाने का रास्ता प्रतीत होता है। अब, rfkill unblock bluetoothलिनक्स पर तुलना करें :-D
मार्टिन पेका

5

तैयार किए गए समाधानों की तलाश करने के बाद, मुझे पता चला है कि यूनिवर्सल विंडोज प्लेटफ़ॉर्म ऐप की रेडियो कंट्रोल एपीआई तक पहुंच है ।

इसलिए मैंने एक कमांड-नियंत्रित ऐप के साथ एक नमूना रेडियो नियंत्रण ऐप को मर्ज किया, और इसका परिणाम यहां है: https://github.com/peci1/RadioControl । यह विंडोज स्टोर पर प्रकाशित हुआ है

सामान्य तौर पर, एप्लिकेशन को केवल पृष्ठभूमि में चलने देना संभव नहीं है, इसलिए आपको पहले GUI लॉन्च करने की आवश्यकता है, और फिर आप इसे कमांडलाइन से कॉल कर सकते हैं जैसे

radiocontrol.exe 0 on
radiocontrol.exe Bluetooth off

मुख्य विशेषताएं हैं कि इस एप्लिकेशन की जरूरत है:

using Windows.Devices.Radios;
await Radio.RequestAccessAsync();
var radios = await Radio.GetRadiosAsync();
await radios[0].SetStateAsync(RadioState.On);

फिर आपको ऐप मेनिफ़ेस्ट में रेडियो क्षमता जोड़ने की भी आवश्यकता है:

<DeviceCapability Name="radios" />

और कमांडलाइन से नियंत्रण की अनुमति देने के लिए, आपको protected override async void OnActivated(IActivatedEventArgs args)App.xaml.cs में विधि को ओवरराइड करना होगा और एक शाखा में प्रसंस्करण करना होगा जैसे:

switch (args.Kind)
        {
            case ActivationKind.CommandLineLaunch:

यह जवाब बेहतर StackOverflow फिट बैठता है।
harrymc

@MartinPecka संयोग से, क्या आपको पता है कि ब्लूटूथ हार्डवेयर को फिर से कनेक्ट करना है जिसका उपयोग करके डिस्कनेक्ट किया गया है Disable/Enable-NetAdapter? superuser.com/questions/1444278/…
जिनसो

3

यह ऑटोहॉट्की स्क्रिप्ट ट्रिक लगती है। मैं Sleepवहां से परेशान हूं, लेकिन ऐसा लगता है कि खिड़की सक्रिय हो जाती है इससे पहले कि वह मेरी कीस्ट्रोक्स प्राप्त करने के लिए तैयार हो जाए।

SendMode Input
Run, ms-settings:bluetooth
WinWaitActive, Settings
Sleep 300
Send,{Tab}{Space}
WinClose, A

क्रॉसस्टॉस्टेड टू /programming//q/48700268/308851 यह पता लगाने के लिए कि इसके साथ क्या Sleep 300बदला जा सकता है।


यह भी ज्यादातर मामलों में एक समाधान हो सकता है। मुझे कीस्ट्रोक्स भेजने के बाद एक छोटी नींद भी जोड़ने की जरूरत थी। और अगर स्क्रीन लॉक है तो यह समाधान काम नहीं करता है। मेरे द्वारा पोस्ट किया गया यूनिवर्सल विंडोज ऐप लॉक स्क्रीन के साथ भी काम करता है।
मार्टिन पेका

2

यहाँ एक आंशिक समाधान है: wmic path Win32_PNPEntity where "caption like '%bluetooth%' AND DeviceID like 'USB\\%'" call disableनिश्चित रूप से ब्लूटूथ ऑन / ऑफ स्विच गायब हो जाता है और डिवाइस मैनेजर रिपोर्ट करता है This device is disabled. (Code 22)। चाहे वह रेडियो को मारने के लिए पर्याप्त हो, मुझे यकीन नहीं है।

मैं उन दलीलों को callस्वीकार करने में असमर्थ हूं जो तर्क स्वीकार करते हैं। मुझे लगता है कि यहां किसी तरह का होना चाहिए rfkill


क्षमा करें, जैसा कि आप इसका वर्णन करते हैं, मेरे लिए काम नहीं करता है। मेरे लिए, ब्लूटूथ प्लेबैक बंद हो जाता है, लेकिन नियंत्रण कक्ष में सभी ब्लूटूथ स्विच चालू रहते हैं। और enableब्लूटूथ प्लेबैक को फिर से शुरू नहीं करता है। PNPEntity वर्ग पर प्रलेखन यहाँ है: msdn.microsoft.com/en-us/library/aa394353(v=vs.85).aspx , लेकिन कोई अन्य उपयोगी तरीका नहीं लगता ...
मार्टिन पेक

1

आप इस वाक्यविन्यास का उपयोग करके कमांड लाइन से एक उपकरण को सक्षम / अक्षम करने के लिए DevManView का उपयोग कर सकते हैं :

devmanview /disable <Device Name>   
devmanview /enable <Device Name>    

यह /use_wildcardतर्क के साथ वाइल्डकार्ड के उपयोग की भी अनुमति देता है।


देवमानव वास्तव में एक उपयोगी उपकरण है, लेकिन यह मेरी समस्या का समाधान नहीं करता है। समस्या यह है कि ऐसा उपकरण प्रतीत नहीं होता है जिसे आप ब्लूटूथ रेडियो को बंद करने के लिए डिवाइस प्रबंधक में अक्षम कर सकते हैं।
मार्टिन पेका

@MartinPecka क्या आपको इनमें से कोई दिखाई नहीं देता? i.stack.imgur.com/UrOuc.png यदि नहीं, तो आप ड्राइवरों को आज़माना और अपडेट करना चाहते हैं ...
rahuldottech

मैं ब्लूटूथ डिवाइस देखता हूं, लेकिन इसे अक्षम करने से प्लेबैक बंद नहीं होता है - शायद इसलिए कि सिस्टम को वास्तव में अक्षम होने के लिए इसे फिर से चालू करने की आवश्यकता है (जैसा कि मूल प्रश्न में कहा गया है)।
मार्टिन पेका

0

Powershell के पास cmdlets करने के लिए वही है जो आप चाहते हैं:

https://gallery.technet.microsoft.com/PowerShell-Device-60d73bb0

उपकरणों की सूची प्राप्त करने के लिए गेट-डिवाइस का उपयोग करें। आप अपने डिवाइस को चुनने के लिए किस-किस ऑब्जेक्ट के माध्यम से पाइप कर सकते हैं और फिर उसे अक्षम-डिवाइस या सक्षम-डिवाइस पर पाइप कर सकते हैं।

विस्तृत निर्देश...

डाउनलोड और फ़ाइल खोलना।

व्यवस्थापक के रूप में एक पॉवरशेल प्रारंभ करें।

यदि आवश्यक हो तो निष्पादन नीति बदलें:

Set-ExecutionPolicy Unrestricted

मॉड्यूल आयात करें:

Import-Module .\DeviceManagement.psd1

यदि आपको उन उपकरणों की सूची को संकीर्ण करने की आवश्यकता है, जिनका आप तुलना-समान उपयोग कर सकते हैं:

Get-Device | Where-Object {$_.Name -like '*bluetooth*'}

यदि आप सटीक नाम जानते हैं तो आप एक-ईक (बराबर) का उपयोग कर सकते हैं:

Get-Device | Where-Object {$_.Name -eq 'Martin's Bluetooth Adapter'} | Disable-Device -Confirm:$False

पैंट पर हाथ पोंछे।


यह सिर्फ रेडियो के बजाय यूएसबी डिवाइस को निष्क्रिय कर देगा। wmicयह भी कर सकते हैं, कम से कम मुझे ऐसा लगता है।
चक्स

सवाल यह नहीं पूछा कि कैसे रेडियो को अक्षम किया जाए लेकिन एडॉप्टर को नहीं। भेद क्यों? यदि आप मुझे एक अच्छा कारण दे सकते हैं, तो मैं आपके लिए खुदाई करने पर विचार करूंगा, लेकिन मैंने उस सवाल का जवाब दिया जिसमें पूछा गया था कि "मैं वास्तव में किस चीज में दिलचस्पी रखता हूं, वास्तव में ब्लूटूथ एडाप्टर को अक्षम / सक्षम करने का एक तरीका है। - मार्टिन पेक 5 फरवरी। 9:31 "
सर्वनाश

मुझे खेद है, एडॉप्टर और रेडियो में क्या अंतर है? मैं इन दोनों शब्दों को बराबर मानता हूं। इस HW चीज़ को प्रदान करने वाले सॉफ़्टवेयर उपकरणों का *** लोड है, और आप सही हैं कि यह प्रश्न उनके बारे में नहीं है।
मार्टिन पीका

इसके अलावा, रिकार्डो मेंडेस की यह और 2012 की पीएस स्क्रिप्ट मेरे विन 10 1709 64 बिट पर काम नहीं करती है, जैसा कि उनकी टिप्पणियों में वर्णित है। दोनों त्रुटि के साथ समाप्त होते हैं Disable-Device : Error calling SetupDiCallClassInstaller। मैं उन्हें व्यवस्थापक के रूप में और अप्रतिबंधित निष्पादन नीति के साथ चलाता हूं।
मार्टिन पीका

0

मैंने एक बैच स्क्रिप्ट बनाई जो एक reg कुंजी मान की जांच करती है जो केवल तभी होती है जब आपका ब्लूटूथ रेडियो सक्षम होता है। इसके बाद बेन एन की पॉवरशेल लिपि को सही पैरामीटर के साथ इसकी वर्तमान स्थिति को बदलने के लिए कहा जाता है। इसे टॉगल शॉर्टकट में बदल देता है, इसके बजाय अलग-अलग उपयोग करने के लिए।

@echo off
FOR /F "skip=2 tokens=2,*" %%A IN ('reg.exe query "HKLM\SYSTEM\CurrentControlSet\Services\bthserv\Parameters\BluetoothControlPanelTasks" /v "state"') DO set "VAR=%%B"

if %VAR%==0x1 (goto ON)

Powershell.exe -executionpolicy remotesigned -windowstyle hidden -File ".\bluetooth.ps1" -BluetoothStatus On
goto end

:ON
Powershell.exe -executionpolicy remotesigned -windowstyle hidden -File ".\bluetooth.ps1" -BluetoothStatus Off

:end

-1

कमांड प्रॉम्प्ट (प्रशासक के रूप में) से निम्नलिखित कमांड को निष्पादित करते हुए चाल चली:

netsh interface set interface name="Bluetooth Network Connection" admin=disabled

मैंने पहले अपने वाई-फाई अडैप्टर को निष्क्रिय करने के लिए उसी कमांड का उपयोग किया था, और पाया कि यह अन्य एडेप्टर के साथ भी काम करता है: कंट्रोल पैनल> नेटवर्क और इंटरनेट> नेटवर्क कनेक्शन। बस अपने एडेप्टर के नाम पर "नाम" तर्क बदलें। आप अंतिम तर्क को बदलकर भी इसे फिर से सक्षम कर सकते हैं admin=enabled


1
यह भी केवल पैन ड्राइवरों को अक्षम करने के लिए लगता है, लेकिन रेडियो डिवाइस को स्वयं बंद नहीं करता है (नियंत्रण कक्ष में, ब्लूटूथ अभी भी "के रूप में" बताया जा रहा है)।
मार्टिन पेक्का

ब्लूटूथ repro परीक्षण द्वारा सत्यापित, अब ब्लूटूथ बंद नहीं करता है।
मार्टिन पेका

मुझे क्षमा करें @ peci1, मैंने आपके प्रश्न को गलत समझा। मैं पहले से ही ब्लूटूथ को अक्षम करने से संबंधित प्रश्नों को देख रहा था और आपके प्रश्न की व्याख्या समान थी। तो आपका लक्ष्य ब्लूटूथ डिवाइस को बंद करना (पावर कट करना) है? मैं थोड़ा शोध करूंगा और आपको बता दूंगा कि क्या मुझे कुछ मिला।
मीका वर्टिकल

@ peci1 क्या यह लिंक बिल्कुल मददगार होगा ?
मीका वर्टिकल

नहीं, यह नहीं है। यह USB के बारे में है, ब्लूटूथ डिवाइस के बारे में नहीं। और लिंक किए गए डिवाइस प्रबंधन Cmdlet या तो काम नहीं करता है।
मार्टिन पेक्का
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.