PowerShellでUSB機器リストを取得して有効・無効化する。

# はじめに
Windowsに繋がっている特定のデバイスを有効、無効にする方法がないか？調べたところ、PowerShellの```PnpDevice```でできることがわかったのでまとめる。

## PnpDevice
プラグアンドプレイに関わる処理ができる。リストを取得したり、デバイスを指定して有効、無効をすることができる。

コマンド名|意味
---|---
Get-PnpDevice|機器のリストを取得する。
Enable-PnpDevice|デバイスを有効化する。
Disable-PnpDevice|デバイスを無効化する。

## USB機器リスト
現在接続しているリストの取得は```Get-PnpDevice```に```-PresentOnly```を付ける。　これにより、Status,     Class, FriendlyName                           , InstanceIdのリストを取得できる。
```powershell
Get-PnpDevice -PresentOnly
```
ここから、USBだけ抜き出す場合は、InstanceIDがUSBから始まる。でフィルタすればよい。

```powershell
Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match '^USB' }

<#
Status     Class           FriendlyName                                                                     InstanceId
------     -----           ------------                                                                     ----------
OK         DiskDrive       SMI USB DISK USB Device                                                          USBSTOR\...
OK         DiskDrive       Sony Storage Media USB Device                                                    USBSTOR\...
OK         USB             USB ルート ハブ (USB 3.0)                                                        USB\ROOT...
OK         USB             USB ルート ハブ (USB 3.0)                                                        USB\ROOT...
OK         USB             USB 大容量記憶装置                                                               USB\VID_...
OK         USB             汎用 USB ハブ                                                                    USB\VID_...
OK         HIDClass        USB 入力デバイス                                                                 USB\VID_...
OK         HIDClass        USB 入力デバイス                                                                 USB\VID_...
OK         USB             USB Composite Device                                                             USB\VID_...
OK         Bluetooth       インテル(R) ワイヤレス Bluetooth(R)                                              USB\VID_...
OK         USB             USB 大容量記憶装置                                                               USB\VID_...
#>
```

## 機器の有効・無効化
-InstanceId　に　有効・無効化したいでUSBデバイスのInstanceIDを指定する。```-Confirm:$false```はユーザに対して、実行許可確認をしないで実行したい場合につける。

```powershell
#有効化
Enable-PnpDevice -InstanceId $dev.InstanceId -Confirm:$false

#無効化
Disable-PnpDevice -InstanceId $dev.InstanceId -Confirm:$false
```

## USBメモリを有効・無効化する例

```powershell
#現在デバイスリスト-----------------------------------
$devlist = Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match '^USB' }
Write-Output $devlist

#USB 大容量記憶装置を無効化---------------------------
foreach ($dev in $devlist) {
	if ($dev.FriendlyName -like "USB 大容量記憶装置") {
		Write-Output "Disable : $($dev.Class) : $($dev.FriendlyName) : $($dev.InstanceId)"
		# デバイスを無効にする
		Disable-PnpDevice -InstanceId $dev.InstanceId -Confirm:$false
	}
}
$current_devlist = Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match '^USB' }
Write-Output $current_devlist

#USB 大容量記憶装置を有効化---------------------------
foreach ($dev in $devlist) {
	if ($dev.FriendlyName -like "USB 大容量記憶装置") {
		Write-Output "Enable : $($dev.Class) : $($dev.FriendlyName) : $($dev.InstanceId)"
		# デバイスを有効にする
		Enable-PnpDevice -InstanceId $dev.InstanceId -Confirm:$false
	}
}
$current_devlist = Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match '^USB' }
Write-Output $current_devlist
```

```:結果
Status     Class           FriendlyName                                                                     InstanceId
------     -----           ------------                                                                     ----------
OK         DiskDrive       SMI USB DISK USB Device                                                          USBSTOR\...
OK         DiskDrive       Sony Storage Media USB Device                                                    USBSTOR\...
OK         USB             USB ルート ハブ (USB 3.0)                                                        USB\ROOT...
OK         USB             USB ルート ハブ (USB 3.0)                                                        USB\ROOT...
OK         USB             USB 大容量記憶装置                                                               USB\VID_...
OK         USB             汎用 USB ハブ                                                                    USB\VID_...
OK         HIDClass        USB 入力デバイス                                                                 USB\VID_...
OK         HIDClass        USB 入力デバイス                                                                 USB\VID_...
OK         USB             USB Composite Device                                                             USB\VID_...
OK         Bluetooth       インテル(R) ワイヤレス Bluetooth(R)                                              USB\VID_...
OK         USB             USB 大容量記憶装置                                                               USB\VID_...


------------------------
Disable : USB : USB 大容量記憶装置 : USB\VID_090C&PID_1000\........
Disable : USB : USB 大容量記憶装置 : USB\VID_054C&PID_05BA\........
------------------------
OK         USB             USB ルート ハブ (USB 3.0)                                                        USB\ROOT...
OK         USB             USB ルート ハブ (USB 3.0)                                                        USB\ROOT...
Error      USB             USB 大容量記憶装置                                                               USB\VID_...
OK         USB             汎用 USB ハブ                                                                    USB\VID_...
OK         HIDClass        USB 入力デバイス                                                                 USB\VID_...
OK         HIDClass        USB 入力デバイス                                                                 USB\VID_...
OK         USB             USB Composite Device                                                             USB\VID_...
OK         Bluetooth       インテル(R) ワイヤレス Bluetooth(R)                                              USB\VID_...
Error      USB             USB 大容量記憶装置                                                               USB\VID_...


------------------------
Enable : USB : USB 大容量記憶装置 : USB\VID_090C&PID_1000\........
Enable : USB : USB 大容量記憶装置 : USB\VID_054C&PID_05BA\........
------------------------
OK         DiskDrive       SMI USB DISK USB Device                                                          USBSTOR\...
OK         DiskDrive       Sony Storage Media USB Device                                                    USBSTOR\...
OK         USB             USB ルート ハブ (USB 3.0)                                                        USB\ROOT...
OK         USB             USB ルート ハブ (USB 3.0)                                                        USB\ROOT...
OK         USB             USB 大容量記憶装置                                                               USB\VID_...
OK         USB             汎用 USB ハブ                                                                    USB\VID_...
OK         HIDClass        USB 入力デバイス                                                                 USB\VID_...
OK         HIDClass        USB 入力デバイス                                                                 USB\VID_...
OK         USB             USB Composite Device                                                             USB\VID_...
OK         Bluetooth       インテル(R) ワイヤレス Bluetooth(R)                                              USB\VID_...
OK         USB             USB 大容量記憶装置                                                               USB\VID_...


```

以上