উইনআরটি-র সাথে প্রয়োজনীয় আন্তঃযোগিতার কারণে এটি চ্যালেঞ্জিং, তবে খাঁটি পাওয়ারশেলে এটি সম্ভব:
[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
এটি ব্যবহার করতে, সংরক্ষণ করুন এটি একটি পিএস 1 ফাইল, যেমন bluetooth.ps1
। আপনি যদি ইতিমধ্যে না থাকেন তবে আপনার সিস্টেমে স্ক্রিপ্টগুলির সম্পাদন সক্ষম করতে পাওয়ারশেল ট্যাগ উইকিটির স্ক্রিপ্টগুলি সক্ষম করতে বিভাগের নির্দেশাবলী অনুসরণ করুন । তারপরে আপনি এটিকে পাওয়ারশেল প্রম্পট থেকে চালাতে পারেন:
.\bluetooth.ps1 -BluetoothStatus On
ব্লুটুথ বন্ধ করতে, Off
পরিবর্তে পাস করুন।
এটি একটি ব্যাচ ফাইল থেকে চালানোর জন্য:
powershell -command .\bluetooth.ps1 -BluetoothStatus On
ক্যাভেট: যদি ব্লুটুথ সহায়তা পরিষেবা চালু না থাকে, স্ক্রিপ্টটি এটি শুরু করার চেষ্টা করে কারণ অন্যথায়, উইনআরটি ব্লুটুথ রেডিও দেখতে পাবে না। হায়রে, স্ক্রিপ্ট প্রশাসক হিসাবে চলমান না থাকলে পরিষেবা শুরু করা যাবে না। এই অপ্রয়োজনীয় করতে, আপনি সেই পরিষেবার স্টার্টআপ ধরণেরটিকে স্বয়ংক্রিয়ভাবে পরিবর্তন করতে পারেন।
এখন কিছু ব্যাখ্যা জন্য। প্রথম তিনটি লাইন স্ক্রিপ্টের প্যারামিটারগুলি স্থাপন করে। আন্তরিকতার সাথে শুরু করার আগে, আমরা ব্লুটুথ সহায়তা পরিষেবা চালু রয়েছে তা নিশ্চিত করে নিই এবং এটি চালু না করে। তারপরে আমরা System.Runtime.WindowsRuntime
অ্যাসেম্বলিটি লোড করি যাতে আমরা WindowsRuntimeSystemExtensions.AsTask
উইনআরটি-স্টাইলের কার্যগুলি (যা। নেট / পাওয়ারশেল বুঝতে পারে না) N নেটকে রূপান্তর করতে পদ্ধতিটি ব্যবহার করতে পারি Task
। সেই নির্দিষ্ট পদ্ধতিতে বিভিন্ন প্যারামিটার সেটগুলির একটি নৌকা বোঝা রয়েছে যা পাওয়ারশেলের ওভারলোড রেজোলিউশনটি ট্রিপ আপ করে বলে মনে হয়, সুতরাং পরবর্তী লাইনে আমরা নির্দিষ্টটি পাই যা কেবলমাত্র একটি ফলাফলযুক্ত উইনআরটি টাস্ক গ্রহণ করে। তারপরে আমরা একটি ফাংশন সংজ্ঞায়িত করি যা আমরা অ্যাসিঙ্ক্রোনাস উইনআরটি টাস্ক থেকে উপযুক্ত ধরণের ফলাফল বের করতে বেশ কয়েকবার ব্যবহার করব। এই ফাংশনটির ঘোষণার পরে, আমরা উইনআরটি মেটাডেটা থেকে দুটি প্রয়োজনীয় ধরণের লোড করি। স্ক্রিপ্টের বাকী অংশটি আপনার উত্তরটিতে আপনি যে সি # কোড লিখেছিলেন তার কেবল পাওয়ারশেল অনুবাদ; এটি Radio
ব্লুটুথ রেডিওর সন্ধান এবং কনফিগার করতে উইনআরটি ক্লাস ব্যবহার করে ।