[MECM/SCCM]Windows10のドライバー削除でPnPUtilが動かない!意外な落とし穴

MCM(MECM)
[SCCM]Windows 10のドライバー削除で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適用で困ったことがございましたら是非お問い合わせください。