PowerShellを使ってプリンターをまとめてインストールする


Windows Serverにプリンタを50機種・100台程度インストールすることになり、手作業ではやってられん。ということで、PowerShellでスクリプトを書いて自動化することにしました。

## 開発環境
- Windows 10
- Visual Studio Code + PowerShell Language Support for Visual Studio Code

## 実行環境
- Windows Server 2012R2

## 注意
使用したコマンドレットはWindows 8/2012以降でないと使えないので注意が必要です。詳細は[こちら](https://social.technet.microsoft.com/Forums/ja-JP/95fa251b-7741-44ed-b9ba-f5dedc7a6b29/powershell1239812300getprinter1230112467125101253112489123642035129992?forum=powershellja)。

## 手順
以下の手順で作業をおこないます。

1. プリンタドライバの入手と解凍
2. INFファイルのインストール
3. プリンタドライバのインストール
4. プリンタポートの作成
5. プリンタの作成
6. プリンタ固有の設定

### プリンタドライバの入手と解凍
インストールするプリンタのドライバをメーカーのサイトなどから入手します。今回はWindows Server 2012R2用のものを取得しました。
取得したドライバはzipファイルや自己解凍形式の圧縮ファイルになっているので、適当なディレクトリ(例えば、C:\work)に解凍しておきます。

### INFファイルのインストール
プリンタドライバを解凍したディレクトリにINFファイルがあるので、まずはそれをインストールします。

```DOS:INFファイルのインストール
pnputil -a "C:\work\driver\FX DocuCentre-V C5575\fx5c7775T2plw170710wxp6fja\cswnd\ART_EX\amd64\001\FXLSOJL.INF"
```

-aオプションにINFファイルの絶対パスを指定します。

### プリンタドライバのインストール
1つ前のステップでインストールしたINIファイルを開いて、インストールするプリンタドライバ名を確認します。

```INI:FXLSOJL.INF
(略)

[FXIDPF.NTamd64]
"FX DocuCentre-V C2275"  = DC_C2275_PLW,USBPRINT\FUJI_XEROXDocuCentre3443
"FX DocuCentre-V C2275"  = DC_C2275_PLW,LPTENUM\FUJI_XEROXDocuCentre3443
"FX DocuCentre-V C2275"  = DC_C2275_PLW,WSDPRINT\FUJI_XEROXDocuCentre3443

"FX DocuCentre-V C3375"  = DC_C3375_PLW,USBPRINT\FUJI_XEROXDocuCentre0813
"FX DocuCentre-V C3375"  = DC_C3375_PLW,LPTENUM\FUJI_XEROXDocuCentre0813
"FX DocuCentre-V C3375"  = DC_C3375_PLW,WSDPRINT\FUJI_XEROXDocuCentre0813

"FX DocuCentre-V C4475"  = DC_C4475_PLW,USBPRINT\FUJI_XEROXDocuCentreBDA3
"FX DocuCentre-V C4475"  = DC_C4475_PLW,LPTENUM\FUJI_XEROXDocuCentreBDA3
"FX DocuCentre-V C4475"  = DC_C4475_PLW,WSDPRINT\FUJI_XEROXDocuCentreBDA3

"FX DocuCentre-V C5575"  = DC_C5575_PLW,USBPRINT\FUJI_XEROXDocuCentre83F3
"FX DocuCentre-V C5575"  = DC_C5575_PLW,LPTENUM\FUJI_XEROXDocuCentre83F3
"FX DocuCentre-V C5575"  = DC_C5575_PLW,WSDPRINT\FUJI_XEROXDocuCentre83F3

(略)
```

INIファイルを開いて上のような箇所を探します。今回は、C5575をインストールするので、"FX DocuCentre-V C5575"をメモしておきます。これがプリンタドライバ名となります。大文字・小文字、空白も区別するので注意してください。

`Add-PrinterDriver`コマンドレットを使って、プリンタドライバをインストールします。

```DOS:プリンタドライバのインストール
Add-PrinterDriver -Name "FX DocuCentre-V C5575"
```

-Nameオプションでインストールするプリンタドライバ名を指定します。INFファイルの場所もオプションで指定できるようです。
`Add-PrinterDriver`コマンドレットの詳細については、[こちら](https://technet.microsoft.com/ja-jp/library/hh918346(v=wps.630).aspx)を参照してください。

### プリンタポートの作成
今回は、TCP/IPプリンタポートを作成します。`Add-PrinterPort`コマンドレットを使用します。プロトコルは"RAW"で作成しています。最近のプリンタは大抵"RAW"でいけます。

```DOS:プリンタポートの作成
Add-PrinterPort -Name "192.168.14.1" -PrinterHostAddress "192.168.14.1" -PortNumber 9100
```

使用したオプションの意味は以下のとおりです。

|オプション名|設定内容|
|:---------|:-----|
|Name|プリンタポートの名前。今回はIPアドレスと同じにしました。|
|PrinterHostAddress|プリンタのIPアドレス。このオプションを使うと、TCP/IPポートを作成します。|
|PortNumber|最近のレーザープリンタの場合は9100でよい。不安な時はマニュアル等で確認してください。|

ラインプリンタの場合は少しオプションが異なります。RAWではなく、LPRプロトコルとなるからです。

```DOS:プリンタポートの作成(ラインプリンタの場合)
Add-PrinterPort -Name "192.168.14.4" -LprHostAddress "192.168.14.4" -LprQueueName "LP1" -LprByteCounting
```

|オプション名|設定内容|
|:--------|:------|
|Name|プリンタポート名。IPアドレスと同じにしました。|
|LprHostAddress|プリンタのIPアドレス。LPRプロトコルのTCP/IPポートを作成する場合は、こちらのオプションを使います。|
|LprQueueName|プリンタのキュー名を設定します。InfoPrint系は"LP1"のようです。サポートサイト等で確認できます。|
|LprByteCounting|LPRバイトカウントを有効にするかどうか。オプションを付けると有効になります。|

`Add-PrinterPort`コマンドレットの詳細は、[こちら](https://technet.microsoft.com/ja-jp/library/hh918359(v=wps.630).aspx)を参照してください。

### プリンタの作成
いよいよ最後です。`Add-Printer`コマンドレットを使用して、プリンタを作成します。

```DOS:プリンタの作成
Add-Printer -DriverName "FX DocuCentre-V C5575" -Name "FX DocuCentre-V C5575(test)" -PortName "192.168.14.2" -Comment "俺のプリンタ" -Location "俺の部屋"
```

|オプション名|設定内容|
|:---------|:-----|
|DriverName|使用するプリンタドライバ名。|
|Name|プリンタ名。「デバイスとプリンター」に表示される名前となります。|
|PortName|使用するプリンタポートの名前。|
|Comment|コメント。プリンタのプロパティで「コメント」欄に表示されます。|
|Location|場所。プリンタのプロパティで「場所」欄に表示されます。|

`Add-Printer`コマンドレットの詳細は、[こちら](https://technet.microsoft.com/ja-jp/library/hh918353(v=wps.630).aspx)を参照してください。

### プリンタ固有の設定
プリンタ固有の設定がある場合は、コントロールパネル経由で個別に設定します。もしかしたら、こちらもPowerShellでいじれるのかもしれませんが未確認です。

## ps1ファイルでまとめて実行
複数機種・複数台インストールする場合は、"INFファイルのインストール"から"プリンタの作成"までをps1ファイルに記述して、一括実行します。
ただ、PowerShellでps1ファイルを実行しようとすると実行できないエラーが発生します。実行ポリシーのデフォルトが"Restricted"(いかなるスクリプトも実行できない)になっているようです。(OSによってデフォルトが異なるという噂も)
わたしは[こちらの記事](https://qiita.com/tomoko523/items/df8e384d32a377381ef9)を参考にして実行しました。