見出し画像

バッチファイルでプリンタを自動インストールさせる

2023/08/25 「通常使うプリンタに設定する」を追加
2023/09/20 ポートがうまく削除できない場合の対処法を追加
      プリンタプロパティをコマンドから開く方法を追加
-----------------------------------------------------------------------------
ずいぶん昔に作ったものを改めて見直してみた。

当時は大規模なプリンタ入替をワンボタンで一気にインストールするようにしたいという要望で作った。


前提

・ネットワークドライブ越しで動くことを想定する。
 ファイルサーバ環境ではないのでパスは以下で記載
 \\localhost\c$\printerdriver\
 上記の部分を実際のファイルサーバのパスに変えれば動くと思う。

プリンタドライバ用意

infファイルを使ってインストールを行うので、何か適当にDLし、ファイルサーバに格納する。
今回はフジフィルムビジネスイノベーションの以下をDLした

DLしたexeファイルを実行するとプログラムが起動するが、プログラム起動時に生成されるフォルダが欲しいだけなので、停止させる。

画像1

exeはいらないので削除。生成されたフォルダを適用な名前にする。

画像2

前記のようにinfファイルが欲しいので、検索する。

画像3

下記に存在していることが分かった。

\\localhost\c$\printerDrive\printer\Software\PS\amd64\Japanese\001\FXPIOJL.inf

infファイルの中身を見てみる

途中で以下のような箇所がある。
その中にある「FX DocuCentre-VII C5588 PS H2」を今回は入れてみる。

画像4

コマンド確認

自動インストールするために核となるのは以下

C:\Windows\System32\Printing_Admin_Scripts\ja-JP\cscript prndrvr.vbs
C:\Windows\System32\Printing_Admin_Scripts\ja-JP\cscript prnport.vbs
C:\Windows\System32\Printing_Admin_Scripts\ja-JP\cscript prnmngr.vbs

プリンタドライバのインストールをする

まずはドライバをインストールする。
※各パスはローカルPC内でないと動かない。ネットワークドライブにしてもダメだった。

cd C:\Windows\System32\Printing_Admin_Scripts\ja-JP\
cscript prndrvr.vbs -a -m 「ドライバ名」 -v 3 -e "windows x64" -h 「ドライバフォルダへのフルパス」-i 「INFファイルのフルパス」

実際の例は以下。
ドライバのフォルダパス、INFは予め調べた通り。

cd C:\Windows\System32\Printing_Admin_Scripts\ja-JP\
cscript prndrvr.vbs -a -m "FX DocuCentre-VII C5588 PS H2" -v 3 -e "windows x64" -h  c:\printerDrive\printer\Software\PS\amd64\Japanese\001 -i  c:\printerDrive\printer\Software\PS\amd64\Japanese\001\FXPIOJL.inf

プリンタポートを作る

ネットワークプリンタになるので、ポートを作る

cd C:\Windows\System32\Printing_Admin_Scripts\ja-JP\
cscript prnport.vbs -a -r「ポート名」 -h 「IP」 -o raw -n 9100

​実際の例は以下。IPは192.168.0.100、ポート名は「IP_192.168.0.100」とする。

cd C:\Windows\System32\Printing_Admin_Scripts\ja-JP\
cscript prnport.vbs -a -r IP_192.168.0.100 -h 192.168.0.100 -o raw -n 9100

プリンタを作成する

いざプリンタをインストール

cd C:\Windows\System32\Printing_Admin_Scripts\ja-JP\
cscript prnmngr.vbs -a -p 「プリンタ名」 -m 「プリンタドライバ」 -r IP_192.168.3.201

実際の例は以下。

cd C:\Windows\System32\Printing_Admin_Scripts\ja-JP\
cscript prnmngr.vbs -a -p "FX DocuCentre-VII C5588 PS H2" -m "FX DocuCentre-VII C5588 PS H2" -r IP_192.168.0.100

通常使うプリンタに設定する

rundll32.exe printui.dll,PrintUIEntry /y /n 「プリンタ名」

実際の例は以下。

rundll32.exe printui.dll,PrintUIEntry /y /n "FX DocuCentre-VII C5588 PS H2"

コマンドからプリンタプロパティを開かせる

実行すると指定したプリンタのGUIのプロパティ画面が開く

rundll32.exe printui.dll,PrintUIEntry /p /n 「プリンタ名」

実際の例は以下。

rundll32.exe printui.dll,PrintUIEntry /p /n "FX DocuCentre-VII C5588 PS H2"

プリンタドライバを消したい場合は

cd C:\Windows\System32\Printing_Admin_Scripts\ja-JP\
cscript prnmngr.vbs -d -p 「プリンタ名」

プリンタポートも削除

cd C:\Windows\System32\Printing_Admin_Scripts\ja-JP\
cscript prnport.vbs -d -r 「ポート名」

もし、当該ポートが未使用なのに以下のエラーが出る場合

ポートを削除できません エラー 0x80041001 エラーです
操作 DeleteInstance
プロバイダー Win32 Provider
説明 要求されたリソースは使用中です。

Spoolerサービスを以下のように再起動してやり直せばいける

net stop Spooler
net start Spooler

まとめ

既存のプリンタを削除し、新しくプリンタを入れ直すバッチを作る。
なお、管理者として実行しないと「エラーコード:5」が出る。

@echo on
rem echo 既存プリンタを削除します。
cscript prnmngr.vbs -d -p "FX DocuCentre-VII C5588 PS H2"
rem echo 既存ポートを削除します。
cscript prnport.vbs -d -r IP_192.168.0.100
rem echo プリンタドライバをインストールします。
cd C:\Windows\System32\Printing_Admin_Scripts\ja-JP
cscript prndrvr.vbs -a -m "FX DocuCentre-VII C5588 PS H2" -v 3 -e "windows x64" -h  \\localhost\c$\printerDrive\printer\Software\PS\amd64\Japanese\001 -i  \\localhost\c$\printerDrive\printer\Software\PS\amd64\Japanese\001\FXPIOJL.inf
rem echo プリンタポートをインストールします。
cscript prnport.vbs -a -r IP_192.168.0.100 -h 192.168.0.100 -o raw -n 9100
rem echo プリンタを作成します。
cscript prnmngr.vbs -a -p "FX DocuCentre-VII C5588 PS H2" -m "FX DocuCentre-VII C5588 PS H2" -r IP_192.168.0.100

上記バッチで見事インストールされた

画像5

次のアクション

当時はプロパティを変更する仕組みをvbsで実装していたので、改めて確認したい。

その他のバッチファイルの記事は以下


この記事が気に入ったらサポートをしてみませんか?