[MECM/SCCM]Windows10のドライバー削除でPnPUtilが動かない!意外な落とし穴
SCCM で VBScript を実行することがありますが、VBScript から PnPUtil (PnPUtil.exe) コマンドが実行できないという事態に陥ったことがありました。
どのように解決したのかご紹介します。
PnPUtilコマンドとは?
PnPUtil (PnPUtil.exe) は、管理者に次の操作を実行できるコマンド ライン ツールドライバー パッケージ:
・ドライバー パッケージを追加、ドライバー ストアします。
・コンピューターのドライバー パッケージをインストールします。
・ドライバー ストアからドライバー パッケージを削除します。
・現在、ドライバー ストア内にあるドライバー パッケージを列挙します。 ボックス内のパッケージではない唯一のドライバー パッケージの一覧が表示されます。 インボックスドライバー パッケージは Windows またはそのサービス パックの既定のインストールに含まれている 1 つ。
管理者がPCのドライバーをごにょごにょ色々するツールです。プリンターを設定することもでき、とても便利です。
きっかけ
お客様先でのFU適用(Windows 10 Version 1903)中、Windows Hello のセットアップで「問題が発生しました」というエラーが発生してしまいました。
色々を調べてみたところ、原因はPCにインストールされている Windows Hello デバイス用のドライバーの不具合でした。
対応
1機種は最新ドライバーを適用し、もう1機種はドライバーを削除することにしました。
最新ドライバーの適用
SCCM で最新ドライバーを適用する方法は
- メーカーから最新ドライバーのインストーラーをダウンロードする
- インストーラーをサイレントパラメータ付きで実行するように設定する
のように比較的簡単です。
ドライバーの削除
ドライバーの削除をする場合、皆さんはおそらく管理画面から削除されていると思います。
画面操作で削除するのは簡単ですが、たくさんのPC上のドライバーを削除するには手間がかかりすぎるため現実的ではありません。
2つの方法
ではどうするか?考えられる選択肢は以下の2つです。
- PnPUtilコマンドを使う
- PowerShellを使う
今回は PnPUtil コマンドを使います。
PnPUtilコマンドでドライバーを削除する
削除したいドライバーのINFファイルを特定する方法
PnPUtil コマンドでドライバーを削除するには、ドライバーのINFファイルを指定しなければなりません。
しかし管理画面で分かるのはドライバー名だけです。
そこでこんな方法で特定しました。
- 1.インストールされているドライバーの一覧を出力する(pnputil -e > driver1.txt)
- 2.管理画面でドライバーを削除する
- 3.再度インストールされているドライバーの一覧を出力する(pnputil -e > driver2.txt)
- 4.削除前と削除後のドライバーの一覧を比較する
- 5.特定したドライバーのINFファイルを指定してちゃんと削除できるか確認する
管理画面を使ってドライバーを削除する「前」と、削除した「後」の差分が、ドライバーのINFファイルということになります。
PnPUtilコマンドの落とし穴
さっそく PnPUtil コマンドを使ったドライバーの削除を VBScript で実装しました。
で、VBScript を動かしてみたのですが、なぜかドライバーが削除されません。
ファイルシステムリダイレクタのせい
要は32ビットのプロセスから
C:\Windows\System32\pnputil.exe
のように64ビットプログラムを実行すると、SysWOW64 フォルダに探しに行ってしまい見つかりません。
そこで、
C:\Windows\sysnative\pnputil.exe
のように呼び出すことで、ファイルシステムリダイレクタを効かせずに System32 フォルダの pnputil.exe を呼び出すことができます。
調査してくれた社員には感謝です。
VBScript を修正して無事に削除できました。
最後に
Windows 10 Version 1903 のFU適用に四苦八苦しましたが、何とか完遂しました。
FU適用で困ったことがございましたら是非お問い合わせください。