IT Hands-on Lab

小規模組織向けIT環境の構築・運用に役立つ情報を、ハンズオン形式で紹介しています。

【Microsoft Intune】プリンタードライバー配布 PowerShell使用1

Microsoft Intune プリンタードライバー配布 (PowerShell使用)1

Microsoft社が提供するクラウドベースのデバイス管理サービス「Microsoft Intune」における、.intunewinファイルとPowerShellを使ったプリンタードライバーの配布例を紹介します。
これにより、組織内のWindowsPCに対し、プリンターの設定を配信できるようになります。
  • 操作・管理デバイス環境:
    • OS:Windows 11
    • Webブラウザー:Edge
  • 使用プラン:Microsoft 365 Business Premium
  • プリンター:EPSONビジネス向けプリンター(PX-M885F)
    *ネットワークプリンターとして使用

 

今回紹介する記事は、プリンタードライバー内のファイル構成の読み解きが必要で、プリンターのメーカーや機種によってファイル構成が大きく異なるため、設定で試行錯誤するかもしれません。

 

EPSONのビジネスプリンターをお使いの場合は、同社のサポートサイトから入手できる管理ツール(My EPSONへのログインが必要)でパッケージを作成して配布する方が楽です(これについても今後の記事で紹介します)

 

Microsoft Intuneによるプリンタードライバーの配布を検討されている方は、この記事の作業手順を鵜呑みにするのではなく、ファイル構成の読み解きの方法や作業全体の流れを参考につつ、具体的な手順はご自身の環境に合わせて読み替えていただけたらと思います。

 

 

 

プリンタードライバー入手・展開

Webブラウザーにてプリンターメーカーのドライバーダウンロードサイトにアクセスし、お使いのプリンターのドライバーをダウンロードします(この例ではEPSON PX-M885F)。

図表1-1 プリンタードライバー入手(機種指定)

図表1-1 プリンタードライバー入手(機種指定)

図表1-2 プリンタードライバー入手(OS指定)

図表1-2 プリンタードライバー入手(OS指定)

図表1-3 プリンタードライバー入手(ダウンロード)

図表1-3 プリンタードライバー入手(ダウンロード)

 

プリンタードライバーを展開するための解凍ツール(7-Zip等)が未導入の場合は、公式サイトからダウンロード・インストールしておきます。

図表1-4 解凍ツール7-Zip入手

図表1-4 解凍ツール7-Zip入手

 

図表1-3でダウンロードしたプリンタードライバーのファイルを右クリックし、[その他のオプションを確認]を選択します。
画面イメージのようにその他のオプションが表示されたら、[7-Zip>展開]を選択します。

図表1-5 プリンタードライバーの解凍(7-Zipで展開開始)

図表1-5 プリンタードライバーの解凍(7-Zipで展開開始)

 

展開を進めます(画面イメージは7-Zipを使用した場合)。

図表1-6 プリンタードライバーの解凍(7-Zipで展開完了)

図表1-6 プリンタードライバーの解凍(7-Zipで展開完了)

 

展開結果のフォルダーが作成されたら、中身を確認します。
サブフォルダーやファイルが表示されれば問題ありません。
このエクスプローラーの画面は次の工程で使用しますので、閉じずにそのままにしておきます。

図表1-7 展開したプリンタードライバーの確認

図表1-7 展開したプリンタードライバーの確認

 

展開済ドライバーにて必要ファイルの確認・収集

エクスプローラーを別途起動し、作業用フォルダーを作成し(この例ではC:\temp\printer_test)、その下にinputフォルダーとoutputフォルダーを作成します。
さらに、inputフォルダーに移動します。

図表2-1 収集ファイルの配置準備

図表2-1 収集ファイルの配置準備

 

前の工程でドライバーを展開した時のエクスプローラー画面に戻り、INFファイルを見つけたら、テキストエディタでこれを開きます。
この例のように、INFファイルが複数ある場合は、”Class=Printer”のような記述があればそれがプリンタードライバー用のINFファイルです。

図表2-2 INFファイルの特定

図表2-2 INFファイルの特定

 

プリンタードライバー用のINFファイルの内容から、他に必要なファイルを特定します。

  • [Version]に”CatalogFile=xxx.CAT”のような記述あり:このファイルが必要
  • [SourceDiskNames]にCAB等のファイル名の記述あり:このファイルが必要
  • 上記のようなファイル名の記述なし:数字を確認し、[SourceDisksFiles]に同じ数字が振られているファイルも必要

この例では、[SourceDisksFiles]の数字が2と3のファイルは[SourceDiskNames]に記述されたCABファイル内に全て格納されていました。[SourceDiskNames]にCABファイルの記述があった場合は、念のため[SourceDisksFiles]のファイルを全て含むか確認します。含まれないファイルがあれば、それも必要なファイルです。
また、CABファイルは7-Zipのような解凍ツールで展開すれば中身を確認できます。

図表2-3 INFファイルでの必要なファイルの確認

図表2-3 INFファイルでの必要なファイルの確認

 

必要なファイルを全てinputフォルダーにコピーします。
この例ではコピー対象は以下の通りです。

  • INFファイル:E_WF1SYJ.INF
  • CATファイル([Version]に”CatalogFile=xxx.CAT"と記述されたファイル):E_WF1SYJ.CAT
  • CABファイル([SourceDisksNames]の数字が2,3のファイル): E_WF1SYJ.CAB, E_WL0SHJ.CAB
  • [SourceDisksFiles]の数字が1のファイル(*):(全部で6点)
    *この例では、プリンタードライバーを展開した時のファイルの拡張子の末尾が_になっていましたが、そのままの状態で問題ありません

図表2-4 必要なファイルの収集

図表2-4 必要なファイルの収集

 

収集済ファイルによるドライバー追加検証

PowerShellを管理者として実行し、以下コマンドを実行します。

c:\windows\System32\Pnputil.exe /add-driver "C:\temp\printer_test\input\E_WF1SYJ.INF" /install

「ドライバーパッケージが正常に追加されました。」と表示されれば問題ありません。
なお、PowerShellの画面は後で使いますので、閉じずにそのままにしておきます。

図表3-1 収集ファイルによるドライバー追加検証

図表3-1 収集ファイルによるドライバー追加検証

 

ドライバー配布用PowerShell作成

テキストエディターで新規ファイルを作成し、以下の通り記述し、inputフォルダーに「printer_add.ps1」というファイル名で保存します。

# ログファイルのパスを設定し、ログの記録を開始
$logPath = "C:\temp\printer_test\install_printer_log.txt"
Start-Transcript -Path $logPath

# 定数の指定
$driverName = "EPSON PX-M885F"
$printerName = "EPSON PX-M885F"
$printerIP = "192.168.100.100"

#パスの指定
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition #現スクリプトディレクトリ
$infFile = "$scriptDir\E_WF1SYJ.INF"
$catFile = "$scriptDir\e_wf1syj.cat"

# サイレントインストールを確実にするため、事前にCATファイルから証明書をインストール
$cert = Get-AuthenticodeSignature -FilePath $catFile
if ($cert.SignerCertificate -ne $null) {
    # TrustedPublisherストアに証明書を追加
    $store = New-Object System.Security.Cryptography.X509Certificates.X509Store "TrustedPublisher", "LocalMachine"
    $store.Open("ReadWrite")
    $store.Add($cert.SignerCertificate)
    $store.Close()
    Write-Output "The certificate was successfully installed."
} else {
    Write-Output "Failed to extract certificate."
}
 
# certutilコマンドで証明書を追加
certutil.exe -addstore "TrustedPublisher" $catFile

# パスの出力確認
Write-Host "INF File Path: $infFile"

# ドライバーのインストール
#pnputil.exe /add-driver "C:\temp\printer_test\input\E_WF1SYJ.INF" /install #ps1ローカル実行検証用(intunewin作成時はコメントアウトすること)
& "$Env:SystemRoot\Sysnative\Pnputil.exe" /add-driver $infFile /install #Intune登録用

# ドライバーの追加
if (-not (Get-PrinterDriver -Name $driverName)) {
    Add-PrinterDriver -Name $driverName
}

# ポートの追加
if (-not (Get-PrinterPort -Name "IP_$printerIP")) {
    Add-PrinterPort -Name "IP_$printerIP" -PrinterHostAddress $printerIP
}

# プリンターの追加
if (-not (Get-Printer -Name $printerName)) {
    Add-Printer -Name $printerName -DriverName $driverName -PortName "IP_$printerIP"
}

# ログの記録を停止
Stop-Transcript

 

図表4-1 PowerShellスクリプトの作成

図表4-1 PowerShellスクリプトの作成

 

以下はスクリプトに関する補足説明です。

  • 2行目でログファイルの出力先を指定しています。ps1ファイル実行時にコンソール出力される内容を記録していますので、うまく動作しない時はこれを参照します。
  • 6~8,12,13行目は使用するプリンターの要件に合わせて調整します。
  • CATファイルがない場合は、15~29行目の記述は不要です。
  • 35,36行目はドライバーのインストールコマンドです。35行目はPC上でps1ファイルを手動実行するための記述、36行目はIntune登録用の記述です。

 

この後、PC上でps1ファイルを手動実行してみますので、35行目の頭の#を削除し、36行目の頭に#を付加して保存します。

*Intuneでpnputil.exeを使用する場合、sysnativeフォルダーを指定する必要があります。このフォルダーは仮想フォルダーのため、エクスプローラーで探しても見つかりません。一方、PC上でpnputil.exeを手動実行する場合、C:\windows\System32フォルダーに存在するpuputil.exeを使用します(35行目の通り、パスを記述しなくても動作します)

図表4-2 PowerShellスクリプトのpnputilコマンドのパス一時変更

図表4-2 PowerShellスクリプトのpnputilコマンドのパス一時変更

 

作成済PowerShell動作検証

工程3で使用したPowerShellの画面に戻ります。cdコマンドで、工程4で作成したps1ファイルのあるフォルダーに移動し、ps1ファイルを実行します。

cd c:\temp\printer_test\input
.\printer_add.ps1

「ドライバーパッケージが正常に追加されました。」と表示されれば問題ありません。そうでない場合は、ps1ファイル内の記述誤りや必要ファイルの不足が考えられますので、見直します。

図表5-1 作成したPowerShellスクリプトの手動実行

図表5-1 作成したPowerShellスクリプトの手動実行

 

Windowsの[設定]メニューを起動し、[Bluetoothとデバイス>プリンターとスキャナー]を選択し、対象のプリンターが表示されるか確認します。

図表5-2 プリンター設定メニューへ

図表5-2 プリンター設定メニューへ

 

対象のプリンターが表示されたらこれを選択し、[プリンターのプロパティ]を選択します。
[ポート]タブにps1ファイルで指定したポートが表示されれば問題ありません。
また、操作しているPCがプリンターに接続できる環境にあれば、テスト印刷を試すとなお確実です。

図表5-3 対象PCのプリンターのプロパティ

図表5-3 対象PCのプリンターのプロパティ

 

検証が完了したら、Intune登録用に、ps1ファイルの35,36行目のコメント状態を元に戻しておきます。

図表5-4 PowerShellスクリプトのpnputilコマンドのパス修正

図表5-4 PowerShellスクリプトのpnputilコマンドのパス修正

 

インストール済ドライバー使用不可時の対処(参考)

前の工程でプリンタードライバーのインストールが正常に行われたのに、プリンターとスキャナー画面上、「ドライバーは使用できません」と表示されることがあります。
ドライバーを再インストールしても解消しない場合は、Microsoft Intuneやグループポリシーの設定で、USBデバイスやネットワークの使用制限をかけている可能性があります。
参考まで、Microsoft IntuneでUSBデバイスの使用制限を行っている環境において、このプリンタードライバーの使用を許可する方法を紹介します。

図表6-1 プリンタードライバーを使用できない状態

図表6-1 プリンタードライバーを使用できない状態

 

プリンタードライバーのインストールを試みたPC上で[デバイスマネージャー]を起動し、[印刷キュー]から対象のプリンターを選択し、[イベント]タブを選択し、[クラスGUID]の値を控えておきます。

図表6-2 デバイスマネージャーのプリンタードライバーのクラスGUID確認

図表6-2 デバイスマネージャーのプリンタードライバーのクラスGUID確認

 

WebブラウザーにてMicrosoft Intune管理センターにアクセスし、左メニューの[デバイス]を選択し、サブメニューの[デバイスの管理>構成]を選択し、USBデバイスの使用制限に関するポリシーを選択します。

*Microsoft IntuneによるUSBデバイスの使用制限の方法については、以前の記事で紹介しています。よろしければ参考にしてください

図表6-3 Intune管理センターのデバイス構成ポリシーへ

図表6-3 Intune管理センターのデバイス構成ポリシーへ

 

[構成設定]の[編集]リンクを選択します。
検索欄に[これらのデバイス]と入力し、[これらのデバイス セットアップ クラスと一致するドライバーを使用したデバイスのインストールを許可する]を選択し、図表6-2で控えた[クラスGUID]の値を追加します。

図表6-4 Intune管理センターでのデバイス制限設定の修正

図表6-4 Intune管理センターでのデバイス制限設定の修正

 

少し時間を置いてから図表6-1のPC上で「ドライバーは使用できません」が消えるか確認します。
消えない場合は、USBデバイス以外にも使用制限が行われている可能性がありますので(ネットワークの使用制限等)、Intuneの構成ポリシー等を確認し、対応します。
ネットワークプリンターとして使用する場合、USBデバイスの使用制限は関係ないように思われそうですが、デバイスの追加や使用という観点では同じですので、注意が必要です。

 

次の記事に続きます。

 

 

当ブログ内の連載記事

elmgrn.hatenablog.com

elmgrn.hatenablog.com

 

当ブログ内の関連記事

elmgrn.hatenablog.com