0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-10-06

はじめに

PythonでUSBの機能を有効無効したい場合PyUSBを使えばよいのだと思うが、Windowsの場合、libusb-win32が必要で、このインストールがなかなかうまくいかなかった。そこで、PoweShellとの組み合わせで実現してみた。

使うライブライ

スクリプト 機能
Python subprocess
PowerShell Get-PnpDevice
Enable-PnpDevice
Disable-PnpDevice

subprocessでPythonからPowerShellを実行する。Get-PnpDeviceでデバイスリストを取得、対象のUSBデバイスを抽出し、Enable-PnpDevice、Disable-PnpDeviceで有効、無効化する。

事前に調査した記事は下記。

USBをON・OFFする例

USB 大容量記憶装置をフィルタして、それをOFF/ONする例。PowerShellへパラメータを送る際の""の処理がうまくいかなくて最初手間取ったが、Windwosの場合、PowerShellをsubprocessで使うと、Pythonでできることの幅が広がる。

import subprocess

# USB 大容量記憶装置のInstanceIdをリスト化
usb_search = """
$devlist = Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match '^USB' }
foreach ($dev in $devlist) {
	if ($dev.FriendlyName -like "USB 大容量記憶装置") {
		Write-Output $dev.InstanceId
	}
}
"""
ret = subprocess.run(['powershell','-Command', usb_search], capture_output=True, text=True)
usb_list = ret.stdout.split()

# USBをDisable
for udev in usb_list:
	print(f'"{udev}"をusb_disable')
	subprocess.run(['powershell','-Command', f'Disable-PnpDevice -InstanceId "{udev}" -Confirm:$false'], capture_output=True, text=True)
	
# USBをEnable
for udev in usb_list:
	print(f'"{udev}"をusb_enable')
	subprocess.run(['powershell','-Command', f'Enable-PnpDevice -InstanceId "{udev}" -Confirm:$false'], capture_output=True, text=True)

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?