# hiding errors: $ErrorActionPreference = 'SilentlyContinue' # telling all cmdlets to use a private variable for error logging: $PSDefaultParameterValues.Add('*:ErrorVariable', '+myErrors') # initializing the variable: $myErrors = $null
# do stuff: Stop-Service-Name Spooler dir c:\gibtsnichtabc
# check errors at end USING PRIVATE VARIABLE: $myErrors.Count $myErrors | Out-GridView
# the ID you picked when saving the options: $id = 5388
# the name of the reg value that stores your choices: $flag = "StateFlags$id"
# the location where user choices are stored: $path = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\*"
# get all subkeys where your user choice was enabled: Get-Item-Path$path | Where-Object { $_.Property -contains$flag } # contains your registry value (StateFlags5388) Where-Object { $_.GetValue($flag) -gt0 } # your registry value contains a number greater than 0
Get-PnpDevice-Class Bluetooth | Where-Object HardwareID -match'DEV_' | Select-Object FriendlyName, $Address | Where-Object Address | Out-GridView-Title'Select Bluetooth Device to Remove'-OutputMode Single
functionUnpair-Bluetooth { # take a UInt64 either directly or as part of an object with a property # named "DeviceAddress" or "Address" param ( [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)] [Alias('Address')] [UInt64] $DeviceAddress )
# tell PowerShell the location of the internal Windows API # and define a static helper function named "Unpair" that takes care # of creating the needed arguments: begin { Add-Type-Namespace"Devices"-Name'Bluetooth'-MemberDefinition' [DllImport("BluetoothAPIs.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.U4)] static extern UInt32 BluetoothRemoveDevice(IntPtr pAddress); public static UInt32 Unpair(UInt64 BTAddress) { GCHandle pinnedAddr = GCHandle.Alloc(BTAddress, GCHandleType.Pinned); IntPtr pAddress = pinnedAddr.AddrOfPinnedObject(); UInt32 result = BluetoothRemoveDevice(pAddress); pinnedAddr.Free(); return result; }' }
# do this for every object that was piped into this function: process { $result = [Devices.Bluetooth]::Unpair($DeviceAddress) [PSCustomObject]@{ Success = $result-eq0 ReturnValue = $result } } }
Status ClassFriendlyNameInstanceId ------ ----- ------------ ---------- OKBluetoothBoseQC35IIAvrcpTransportBTHENUM\{0000110C-00... OK Bluetooth Generic Attribute Profile BTHLEDEVICE\{0000180... OK Bluetooth Generic Access Profile BTHLEDEVICE\{0000180... OK Bluetooth Generic Attribute Profile BTHLEDEVICE\{0000180... OK Bluetooth Bamboo Ink Plus BTHLE\DEV_006FF2E608... OK Bluetooth Bose QC35 II Avrcp Transport BTHENUM\{0000110E-00... OK Bluetooth Generic Attribute Profile BTHLEDEVICE\{0000180... OK Bluetooth SMA001d SN: 2110109033 SN2110109033 BTHENUM\DEV_0080251B... OK Bluetooth MX Master 3 BTHLE\DEV_D304DEE615... OK Bluetooth Bluetooth LE Generic Attribute Service BTHLEDEVICE\{0000FE5... OK Bluetooth Microsoft Bluetooth LE Enumerator BTH\MS_BTHLE\6&1B2C8... OK Bluetooth Device Information Service BTHLEDEVICE\{0000180... OK Bluetooth Bluetooth LE Generic Attribute Service BTHLEDEVICE\{0000180... OK Bluetooth Device Information Service BTHLEDEVICE\{0000180... OK Bluetooth Generic Access Profile BTHLEDEVICE\{0000180... OK Bluetooth Bluetooth LE Generic Attribute Service BTHLEDEVICE\{0001000... OK Bluetooth Bluetooth LE Generic Attribute Service BTHLEDEVICE\{0000180... OK Bluetooth MX Keys BTHLE\DEV_D9FDB81EAB... OK Bluetooth Device Information Service BTHLEDEVICE\{0000180... OK Bluetooth Microsoft Bluetooth Enumerator BTH\MS_BTHBRB\6&1B2C... OK Bluetooth Generic Access Profile BTHLEDEVICE\{0000180... OK Bluetooth Bluetooth LE Generic Attribute Service BTHLEDEVICE\{0001000... OK Bluetooth Intel(R) Wireless Bluetooth(R) USB\VID_8087&PID_002... OK Bluetooth Bluetooth Device (RFCOMM Protocol TDI) BTH\MS_RFCOMM\6&1B2C... OK Bluetooth Bluetooth LE Generic Attribute Service BTHLEDEVICE\{0000180... OK Bluetooth Bose QC35 II BTHENUM\DEV_2811A579...
要根据名称搜索特定的蓝牙设备,请尝试下面一行代码。它会查找名称中带有 “Bose” 的所有设备:
1 2 3 4 5 6 7
PS> Get-PnpDevice-Class Bluetooth -FriendlyName *Bose*
Status ClassFriendlyName ------ ----- ------------ OKBluetoothBoseQC35IIAvrcpTransport OKBluetoothBoseQC35IIAvrcpTransport OKBluetoothBoseQC35II
PS> Get-PnpDevice-Class Bluetooth | Select-Object-Property Caption, Manufacturer, Service
Caption Manufacturer Service -------------------------- Bose QC35 II Avrcp Transport Microsoft Microsoft_Bluetooth_AvrcpTransport Generic Attribute Profile Microsoft UmPass Generic Access Profile Microsoft UmPass Generic Attribute Profile Microsoft UmPass Bamboo Ink Plus Microsoft BthLEEnum Bose QC35 II Avrcp Transport Microsoft Microsoft_Bluetooth_AvrcpTransport Generic Attribute Profile Microsoft UmPass SMA001d SN: 2110109033 SN2110109033 Microsoft MX Master 3 Microsoft BthLEEnum Bluetooth LE Generic Attribute Service Microsoft UmPass Microsoft Bluetooth LE Enumerator Microsoft BthLEEnum Device Information Service Microsoft UmPass Bluetooth LE Generic Attribute Service Microsoft UmPass Device Information Service Microsoft UmPass Generic Access Profile Microsoft UmPass Bluetooth LE Generic Attribute Service Microsoft UmPass Bluetooth LE Generic Attribute Service Microsoft UmPass MX Keys Microsoft BthLEEnum Device Information Service Microsoft UmPass Microsoft Bluetooth Enumerator Microsoft BthEnum Generic Access Profile Microsoft UmPass Bluetooth LE Generic Attribute Service Microsoft UmPass Intel(R) Wireless Bluetooth(R) Intel Corporation BTHUSB Bluetooth Device (RFCOMM Protocol TDI) Microsoft RFCOMM Bluetooth LE Generic Attribute Service Microsoft UmPass Bose QC35 II Microsoft
当您使用名词 “PnPDevice” 搜索其他 cmdlet 时,还可以发现启用或禁用的命令:
1 2 3 4 5 6 7
PS> Get-Command-Noun PnPDevice
CommandType Name Version Source ---------------------------- FunctionDisable-PnpDevice1.0.0.0PnpDevice FunctionEnable-PnpDevice1.0.0.0PnpDevice FunctionGet-PnpDevice1.0.0.0PnpDevice
# create a new queue $namespaces = [System.Collections.Queue]::new()
# add an initial namespace to the queue # any namespace in the queue will later be processed $namespaces.Enqueue('root')
# process all elements on the queue until all are taken While ($namespaces.Count -gt0-and ($current = $namespaces.Dequeue())) { # find child namespaces Get-CimInstance-Namespace$current-ClassName __Namespace -ErrorAction Ignore | # ignore localization namespaces Where-Object Name -NotMatch'^ms_\d{2}' | ForEach-Object { # construct the full namespace name $childnamespace = '{0}\{1}'-f$current, $_.Name # add namespace to queue $namespaces.Enqueue($childnamespace) }
# establish network session $credential = Get-Credential-Message'Your logon details' $computername = '127.0.0.1'# one or more comma-separated IP addresses or computer names # note that IP addresses only work with NTFS authentication. # using computer names in AD is more secure (Kerberos)