Windows XP SP3)を搭載したマシンからのUSBプリンターの削除を自動化しています。これを行うには、Microsoftの Devcon ユーティリティを使用しています。
コマンドの実行:
devcon findall *hp*
戻り値:
USBPRINT\HEWLETT-PACKARDHP_LASERJET_PROFESSIONAL_P1606DN\7&8885729&0&USB001: HP
LaserJet Professional P1606dn
1 matching device(s) found.
コマンドの実行:
devcon remove *USBPRINT*
戻り値:
No devices removed.
ハードウェアIDとワイルドカードの複数の組み合わせを試しましたが、うまくいきませんでした。デバイスをコンピューターに接続し、上記のremoveコマンドを実行すると、ハードウェアが削除されます。
この問題は、devconパイプを使用して、デバイスが自動的に構成できるように接続されているかどうかを確認することで発生します。削除できない場合は、プラグインしていなくてもスクリプトで検出されます。
これを複数のUSBプリンターと1つのUSBマウスでテストしましたが、すべて同じ動作を示します。これは、これがDevconの正常な動作であると私に信じさせます。
回避策はありますか?接続されなくなったハードウェアエントリを削除するにはどうすればよいですか?
Devconは機能します。オペレーティングシステムに適したバージョンのdevconをターゲットにしていることを確認する必要があります。
このリンクを見てください http://freneticrapport.blogspot.com/2011/05/windows-hiddennot-connected-device.html 。
OSに適したdevconバージョンをインストールするには:
build -ceZ
次に、次のコマンドを使用してデバイスを削除できます。
devcon remove "@PCI\VEN_1000&DEV_0060&SUBSYS_1F0C1028&REV_04\4&10333E29&0&0030"
引用符に注意して @ 非表示のデバイスを削除できるようにするために必要な記号。
Devcon cannot 現在接続されていないハードウェアを削除します。これは意図された動作です。ドキュメントをもっとよく読むべきだった。
findall
コマンドは、接続されているかどうかに関係なく、すべてのハードウェアを検索します。現在接続されているハードウェアのみを検索するfind
コマンドを使用する必要がありました。
gregLが述べたように、devonは存在しないハードウェアを削除できます。
文字列は正しくフォーマットする必要があります。
次のバッチファイルは、入力文字列に基づいてすべてのデバイスに一致し、それらを削除します。
for /f %%i in ('devcon findall *%1*') do (devcon remove "@%%i")