どうもミツシマです。

今回はPowershellを使ってローカルプリンターを追加・設定出来ないかを検証してみました。

検証環境は以下の通り
ActiveDirectory環境
AD:WIndows Server 2016
PC:Windows10 Pro 1809


これまでコマンドであれば「rundll32.exe printui.dll,PrintUIEntry」を使用していましたが、Powershellでは「Add-PrinterDriver 」・「Add-PrinterPort 」・「Add-Printer」のような使えそうなコマンドがあったのでこちらを使用してみました。


とりあえず最終的に作成したスクリプトはこちら↓
#===環境変数設定===

#スクリプトのパス取得
$ScriptFullPath = $MyInvocation.MyCommand.Path

#追加したいプリンタードライバの名前
$PrinterDriverName = "Canon Generic Plus LIPSLX"

#追加する為のプリンタードライバのINFファイルのパス
$DriverINFPath = "\\192.168.32.254\share$\wingpluslipslxv200x6400\x64\Driver\CNLB0MA64.INF"

#追加するプリンターポート
$PrinterPort = "192.168.32.200"

#追加するプリンターの名前
$PrinterName = "テストCanonプリンター"

#[net use]コマンドに使用する環境変数
$ServerPath = "\\192.168.32.254"
$ConnectUser = "MITSU\testuser01"
$ConnectPW = "p@ssword01"

#===ここまで===


$WindowsPrincipal = [Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
if (-Not($WindowsPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))){
    Write-Output "管理者として実行されていません。再度管理者で実行します。"
    Start-Process powershell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -command $ScriptFullPath" -Verb runas
    Exit
}

#接続するための事前準備[net use]
Write-Output "サーバへの接続準備します"
net use $ServerPath /user:$ConnectUser $ConnectPW

#追加したいプリンタードライバをドライバストアに追加します。
Write-Output "プリンタードライバをドライバストアに追加します"
pnputil.exe -a $DriverINFPath

#ドライバーストアからプリンタードライバーをインストール
Write-Output "ドライバーストアからプリンタードライバーをインストール:$PrinterDriverName"
Add-PrinterDriver -Name $PrinterDriverName

#プリンターポートの作成
Write-Output "プリンターポートの作成:$PrinterPort"
Add-PrinterPort -Name $PrinterPort -PrinterHostAddress $PrinterPort

#プリンターの作成
Write-Output "プリンター作成:$PrinterName"
Add-Printer -Name $PrinterName -DriverName $PrinterDriverName -PortName $PrinterPort
Write-Output "プリンター作成完了.画面を閉じてください."
pause



〜スクリプトの解説〜
せっかくスクリプトにするのでファイルサーバにドライバーを置いてそれを読み込む形で作成しました。
その為、環境変数の設定を変更してもらえれば応用が効くように作成しています。
今回はプリンタードライバーとして「Canon Generic Plus LIPSLX」で検証しました。

もちろんこのスクリプトは「管理者として実行」することが必要なのですが、いちいち管理者としてPowershellウィンドウを開いて、コマンドたたくのは面倒なので、処理の中で管理者権限かどうか確認し、違う場合には管理者として開きなおす処理を入れています。

その後、管理者として実行しているのでサーバにアクセス出来ないかもしれないので念の為「net use」コマンドを使用してアクセス出来るようにしました。

その後は順次プリンタードライバーのインストールプリンターポート設定プリンターの設定としています。
ここで躓いたのがプリンタードライバーのインストール・・・
単純に「Add-PrinterDriver -Name ドライバー名」もしくは直接INFファイルを指定してインストール出来るのかと思いきや、ドライバーストアにあるものからしかインストール出来ない模様。。。
そもそもドライバーストアって初めて聞いたぞ!!!
調べるとプリンターだけでなく、すべてのドライバーを貯めておく場所のよう。ま、作法としてドライバストアからしかプリンタードライバーをインストール出来ないのであれば、まずはドライバーストアに追加する。そのために「pnputil.exe」を使用しています。


後はコメントに書いてある通りの処理です。

今回一番の収穫だったのはPowershellスクリプトが管理者権限として動作しているかを確認する例文を作れたことかな!これは個人的にかなり重宝しそうです 笑笑


本当はこの後「set-printconfiguration」コマンドを駆使して、デフォルトの印刷設定を「白黒」にしたかったのですが、どうあがいても無理でした。。。。。orz
この辺りは英語圏のMicrosoftフォーラムでも出来ない投稿があり、同じように解決策がありませんでした。ドライバの設定をWIndowsコマンドから制御することは難しいのかも。
であれば「Canon Driver Configuration Tool 」でカスタマイズしたドライバーを作ってそれをインストールに使えば!と考えたのですが、カスタマイズするとドライバーの署名が正規のものでなくなり、コマンドでインストール出来ず・・・(;´Д`)


個人的には最後消化不良で終わりましたが、プリンターの基本追加であればコマンド出来ることはわかりました。

P.S. CANONのドライバでカスタマイズしたものを配布する場合には有償の「SetupAssist」を使うしかないのかな〜。でもWebサイト見る限り「Canon Generic Plus LIPSLX」対応してないみたいだし。推奨ドライバーというなら早く対応してほしいな〜
スポンサードリンク