🌟

Intuneでネットワークプリンタを登録する

2022/06/23に公開

Windowsの端末管理をAzure AD joined方式に切り替え、
Intuneを利用した自動キッティングを始めて早半年。
アプリインストールやBitlocker強制などの手作業がほぼ無くなり、ホクホクしておりました。
(1台のキッティング時間60分 → 10分)
ここまで来ると、もっと短縮したくなるのが人情。

残る手作業の「VPN設定(クライアントソフトはIntuneで自動インストール)」と
「ネットワークプリンタの登録」これをどうにかしなくてはならない。
今回はネットワークプリンタをIntuneのスクリプト(PowerShell)機能を利用して、自動登録する方法をご紹介しようと思います。

仕組み

ネットワークプリンタをPCに登録するには、以下の作業が必要になります。

1:ドライバーパッケージのインストール
2:プリンタードライバーの登録
3:プリンターポートの設定

これらの処理をPowerShellで書いて、Intuneで実行させるだけなのですが・・・

構築前の事前準備(ドライバーパッケージどうする問題)

構築の前に、まずドライバーパッケージをどうするかで詰まりました。
利用中プリンターはメーカサイトにexe形式で固められたパッケージしかなく、INFファイルの単体取得が難しかったので、exeファイルをDLした後に解凍し、ドライバファイルのみを抽出しました。

更に、INFファイルをIntune側に持たせたく、Intunewin形式で固めてWindowsアプリ(Win32)で配ろうとしたところ、見事に沼にはまる。(後述)悪戦苦闘のうえ、
結局クラウドストレージ(今回はBOX)にINFファイルを置き、PowerShellでDLする事にしました。


構築

という前提情報を元に、構築していきます。
流れとしては、以下の通り。
1:INFファイルをBOXにアップロードし、PowerShellからダウンロード可能な共有リンクを発行
2:PowerShellを書いて、.ps1ファイルに変換
3:.ps1ファイルをIntuneにてスクリプト処理として登録、対象グループに割り当てる

クラウドストレージの共有リンクを作成

1:exeファイルから抽出したドライバー情報をzipに固めます
2:zipファイルをBOXにアップロード
3:リンクを共有をON、開示範囲を”リンクを知っている全員”、ダウンロード設定を”表示およびダウンロード可能”に設定
altテキスト
4:リンク設定>”ダウンロードを許可”にチェック>直接リンクをコピー
altテキスト

PowerShellを書く

今回書くPowerShellの内容はこちら。

1:Cドライブ直下にtempフォルダを作成
2:BOXからtempフォルダにINFファイル(zip)をDL→Zipを解凍
3:ドライバーパッケージのインストール
4:プリンタードライバーの登録
5:プリンターポートの設定

1:tempフォルダ作成

mkdirを利用

mkdir C:\temp\拠点のフォルダ名

2:BOXからzipファイルをダウンロードして解凍

Invoke-WebRequest
Invoke-WebRequest "BOXの共有リンク" -OutFile "C:\temp\拠点のフォルダ名\x64.zip"

※PowerShell 3.0以上から導入されたコマンドのため、動かなかったらPowerShellをアップデートしてください

Expand-Archive
Expand-Archive -Path C:\temp\拠点のフォルダ名\x64.zip -DestinationPath C:\temp\拠点のフォルダ名

3:ドライバーパッケージのインストール

PnPUtil /add-driver ※管理者の資格情報が必要
pnputil /add-driver "C:\temp\拠点のフォルダ名\x64\Driver\CNLBCMA64.INF"

※x64以下はBOXからDLしたフォルダ(INFファイル)のパス

4:プリンタードライバーの登録

Add-PrinterDriver ※管理者の資格情報が必要
Add-PrinterDriver -Name "Canon MF642C/644C CARPS2"

プリンタードライバー名はINFファイル内の、ここから対象機器に該当する名称を抽出します

5:プリンターポートの設定

Add-PrinterPort
Add-PrinterPort -Name "192.168.*.*" -PrinterHostAddress "192.168.*.*" -PortNumber 9100

※ネットワークプリンタなので、IPアドレスやポート番号についてはご自分の環境設定をご確認ください。

Intune上での作業

PnPUtilとAdd-PrinterDriverのコマンド実行に管理者の資格情報が必要なため、Intuneのスクリプト機能を利用し管理者権限で実行します。

Intuneのスクリプト機能

1:Microsoft Endpoint Manager adminにアクセス
2:デバイス>スクリプト>+追加(Windows10以降)を順にクリック

3:基本タブにて、任意の名前と説明を入力し、次へをクリック
4:スクリプト設定タブにて、スクリプトの場所>ps1ファイルを指定、下図の通り設定し次へをクリック
altテキスト
5:割り当てタブにて、組み込まれたグループに対象のグループを設定し、次へをクリック
6:確認+追加タブにて、追加をクリック

以上です。

余談(win32で撒こうとして、ハマったお話)

当初はドライバとパワーシェルスクリプトをIntuneWinに固めて、Intune Win32 アプリで撒きたかった。
何故ならIntune Win32だと依存関係を利用する事により、実行順序をコントロール出来るし通知としてどの処理が実行されているのか、目視で分かりやすい。

Intune Win32 アプリ

イメージ

公式も

注意
ユーザー コンテキストまたは システム コンテキストでインストールされるように Win32 アプリを構成できま>す。 ユーザー コンテキストでは、特定のユーザーのみが参照されます。 システム コンテキストでは、>Windows 10 デバイスのすべてのユーザーが参照されます。
Azure AD 登録済みであることによってデバイスが登録される場合は、[システム] を選択します。
ユーザーが Win32 アプリをインストールするためにデバイスにログインする必要はありません。
Win32 アプリのインストールとアンインストールは、アプリがユーザー コンテキストでインストールするように設>定されていて、デバイスのユーザーが管理特権を持っている場合、(既定では) 管理特権で実行されます。

と記載あるし、AzureADアカウントもローカルAdministrator権限を持つ設定にしていた。
が、ことごとく処理が失敗する。
スクリプト実行に”-executionpolicy” で「remotesigned」や「Bypass」を噛ましてもNG。
ならば管理者権限が必要な処理だけ、「Intuneのスクリプト処理」にしようとしたが、無慈悲な以下の仕様により不可。

PowerShell スクリプトは、Win32 アプリの実行前に実行されます。 つまり、PowerShell スクリプトは最初に実行されます。 次に、Win32 アプリが実行されます。

実現不可

検証と構築の時間が取れないので、一先ず諦めますが・・・また時間見つけてチャレンジしたい。

Discussion