Intuneでネットワークプリンタを登録する
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、開示範囲を”リンクを知っている全員”、ダウンロード設定を”表示およびダウンロード可能”に設定
4:リンク設定>”ダウンロードを許可”にチェック>直接リンクをコピー
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ファイルを指定、下図の通り設定し次へをクリック
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