はじめに
Windowsに繋がっている特定のデバイスを有効、無効にする方法がないか?調べたところ、PowerShellのPnpDevice
でできることがわかったのでまとめる。
PnpDevice
プラグアンドプレイに関わる処理ができる。リストを取得したり、デバイスを指定して有効、無効をすることができる。
コマンド名 | 意味 |
---|---|
Get-PnpDevice | 機器のリストを取得する。 |
Enable-PnpDevice | デバイスを有効化する。 |
Disable-PnpDevice | デバイスを無効化する。 |
USB機器リスト
現在接続しているリストの取得はGet-PnpDevice
に-PresentOnly
を付ける。 これにより、Status, Class, FriendlyName , InstanceIdのリストを取得できる。
Get-PnpDevice -PresentOnly
ここから、USBだけ抜き出す場合は、InstanceIDがUSBから始まる。でフィルタすればよい。
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
はユーザに対して、実行許可確認をしないで実行したい場合につける。
#有効化
Enable-PnpDevice -InstanceId $dev.InstanceId -Confirm:$false
#無効化
Disable-PnpDevice -InstanceId $dev.InstanceId -Confirm:$false
USBメモリを有効・無効化する例
#現在デバイスリスト-----------------------------------
$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_...
以上