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 वर्ग का उपयोग करता है ।