🖨️

バッチファイルでネットワークプリンタを追加する

2023/03/14に公開

はじめに

Windows環境において、新しいプリンターを複数の端末に設定するのは面倒すぎる!

ドメインコントローラは一応存在する環境のため、プリンタの公開(+ドライバの追加)も行ってみたが、実際にクライアント端末でインストールしようとすると、ドライバ追加時にエラーが出てうまくいかない……。

こうなったら最終手段、行脚してドライバインストールするしかないが、ドライバインストーラを叩いてIPアドレスを入力して… といった手間を何とか減らすべく、バッチファイルで省力化してみることにした。

環境

  • Windows 10 Pro Version 2004 19041.1415

実例

以下のプログラム例は、

  • プリンタドライバ名は「NEC Color MultiWriter 5850C」であるものとする
  • プリンタ名は「%プリンタドライバ名% (%設置場所%)」とする。
    例: NEC Color MultiWriter 5850C (本社1階 事務室)
  • プリンタのIPアドレスは「192.0.2.100」であり、同名のプリンタポートを作成する
  • プリンタポートは、プロトコル「RAW」、ポート「9100」を用いることとする
  • プリンタドライバ(.infファイル等)はNAS上の共有フォルダに存在するものとする
  • 作成と同時にコメントについても登録する
    例: カラープリンター
  • バッチファイルを実行するユーザーは管理者権限を有するものとする

という前提で作成した。

※実際の環境に応じて適宜読み替えてほしい

create_MW5850C_192.0.2.100.bat
@ECHO OFF

set IPADDR=192.0.2.100
set PLACE=本社1階 事務室
set DRVNAME=NEC Color MultiWriter 5850C
set PRNNAME=NEC Color MultiWriter 5850C (%PLACE%)
set COMMENT=カラープリンター
set DRVPATH=\\192.0.2.200\share\プリンタドライバ\MW5850C_64bit\Software\PCL\amd64\Japanese\001\NC6SDJL.inf
set PASPATH=%SystemRoot%\System32\Printing_Admin_Scripts\ja-JP

REM ★管理者権限のチェック
openfiles > NUL 2>&1 
if not %ERRORLEVEL% == 0 (
  echo 一般権限で実行されたため管理者権限で再実行します。
  powershell start-process \"%~f0\" -Verb runas
  goto exit
)

ECHO ―――――――――――――――――――――――――――――――――
ECHO.
ECHO プリンタドライバの追加
ECHO.
ECHO ―――――――――――――――――――――――――――――――――
ECHO.
ECHO 以下のプリンタドライバを追加します。
ECHO.
ECHO ドライバ  : %DRVNAME%
ECHO ポート    : %IPADDR%
ECHO プリンタ名: %PRNNAME%
ECHO 設置場所  : %PLACE%
ECHO コメント  : %COMMENT%
ECHO.
ECHO.
PAUSE
ECHO.

ECHO 同名のプリンタを削除しています...
call rundll32 printui.dll,PrintUIEntry /dl /n "%PRNNAME%" /q
ECHO.

ECHO ポートを追加しています...
call cscript /nologo %PASPATH%\prnport.vbs -a -s %computername% -r %IPADDR% -h %IPADDR% -o raw -n 9100
ECHO.

ECHO プリンタドライバーをインストールしています...
call cscript /nologo %PASPATH%\prndrvr.vbs -a -m "%DRVNAME%" -v 3 -i "%DRVPATH%"
ECHO.

ECHO プリンタを作成しています...
call cscript /nologo %PASPATH%\prnmngr.vbs -a -s %computername% -p "%PRNNAME%" -m "%DRVNAME%" -r %IPADDR%
ECHO.

ECHO コメントを追加しています...
call cscript /nologo %SystemRoot%\System32\Printing_Admin_Scripts\ja-JP\prncnfg.vbs -t -p "%PRNNAME%" -l "%PLACE%" -m "%COMMENT%"
ECHO.


ECHO.
ECHO 設定を完了しました。
PAUSE

プリンタの操作に用いることができるvbs群が「%SystemRoot%\System32\Printing_Admin_Scripts\ja-JP」の下に用意されているため、それらを活用する。

実行例

実行例を見る
cmd.exe
―――――――――――――――――――――――――――――――――

プリンタドライバの追加

―――――――――――――――――――――――――――――――――

以下のプリンタドライバを追加します。

ドライバ  : NEC Color MultiWriter 5850C
ポート    : 192.0.2.100
プリンタ名: NEC Color MultiWriter 5850C (本社1階 事務室)
設置場所  : 本社1階 事務室
コメント  : カラープリンター


続行するには何かキーを押してください . . .

同名のプリンタを削除しています...

ポートを追加しています...
作成または更新されたポート 192.0.2.100

プリンタドライバーをインストールしています...
追加されたプリンター ドライバー NEC Color MultiWriter 5850C

プリンタを作成しています...
追加されたプリンター NEC Color MultiWriter 5850C (本社1階 事務室)

コメントを追加しています...
構成されたプリンター NEC Color MultiWriter 5850C (本社1階 事務室)


設定を完了しました。
続行するには何かキーを押してください . . .

プリンタのプロパティ

つまずきポイント

ポートの新規追加には管理者権限が必要

実行するときに、バッチファイルを右クリック→「管理者として実行」を選択すればよいが
ふつうに実行してしまいアレデキテナイナンデ?!となることが容易に想像できるため、バッチファイル内で管理者権限のチェックを行い、必要であれば昇格して再実行する仕掛けを組み込んだ。
UACダイアログが出るが、それも手順に織り込めば問題ないだろうという判断。

プリンタドライバ名って何?

初めはどの名前を指定すればよいか分からなかった。
ドライバのINFファイルを開くとそれっぽい名前があるはずなのでそれを指定する。

[Manufacturer]セクション内で代入している値と、ドライバ名を示すセクションが対応しているように見えるが、詳しいことはよく分からない。

Microsoft Learn: プリンター INF ファイル インストール セクション

Discussion