くらめその情シス:IntuneでWindowsにPowerShellでアプリをインストール

2020.08.03

はじめに

どうも、情シスの徳道です。

以前の記事 でMacにIntuneのシェルスクリプトを使って外部からアプリをダウンロードしてインストールする、という内容を紹介しました。

MacでできるならWindowsでもできそうよね、ということでPowerShellを使ってインベントリ管理ツールのインストールを試してみました。

なお、今回はオンラインストレージとしてS3の設定もしています。

【この記事の目的】

  • WindowsのPowerShellを用いて外部ストレージ(Amazon S3)からインストールパッケージをダウンロード・自動インストールする

※サンプルアプリはManageEngine Desktop Central(PCインベントリー管理)のエージェント

【ご注意ください】

このシリーズでは以下の条件を満たしAzureを既に利用できていることが前提になっています。

  • Office365などでAzureでライセンス管理が利用可能であること
  • AzureADにユーザー、グループ情報があること(AzureAD Connector連携含む)
  • Azureのグローバル管理者アカウントの権限を持っていること

オンラインストレージを設定

まずインストールしたいアプリのパッケージファイルをインターネット経由でダウンロードできるストレージを用意しましょう。

今回はサンプルとしてAmazon S3からダウンロードする形をとりました。

ストレージのセキュリティには注意

Amazon S3からファイルをダウンロードする場合、バケットにパブリックアクセスを付与する形が手軽ですので、今回はその方法を用いています。

(検証では署名付きURLを用いることもできましたが、公開期間が最長7日なので恒常的に利用するのは難しいと思います)

その場合、そのバケットはインターネットの誰でもダウンロードできる状態になっていることに十分ご注意ください。

今回は以下の対策をとって検証用として利用しています。

  • バケット名はランダムな英数32文字で設定(バケット名は最大63文字までなのでできるだけ長いほうがよい)
  • バケットにはインストーラーファイルだけを置く
  • バケットのパブリックアクセスは読み出しのみ

この辺りは利用される環境のセキュリティポリシーをよくご確認・承認を得て作業されることをお勧めします。

PowerShellスクリプトで認証できるストレージが用意できるならそちらを用いるほうがより安全です。

S3のバケットの作成と設定

バケット名としてランダムな英小文字・数字の文字列を生成してバケットを作成しましょう。

画像では伏せていますが、仮に「smeuj3jslus4zs9er59nugve4q3s9ayv」とします。

作成したバケットのアクセス権限を変更しておきます。パブリックアクセスのEveryone →「オブジェクトの一覧」だけを「はい」にしておきます。

作成したバケットにインストーラーのZIPファイルを「スタンダード」、「パブリックアクセスあり」でアップロードしておきます。

くれぐれもこのバケットには他のファイルをアップロードしないようにしてください。

アップロードしたファイルをクリックして概要タブの一番下にあるオブジェクトURLを取得しましょう。

このURLをブラウザのアドレスバーに貼り付けてインストーラーファイルがダウンロードできることを確認しておきます。

PowerShellではこのURLを用います。このURLを知っていると誰でもダウンロードできてしまうため、管理者以外の方には教えないようにしてください。

インストール用のPowerShell作成、Intune登録

PowerShell作成

ではインストーラー用のPowerShellを作成していきます。

ManageEngine Desktop Centralのインストーラーは、.msiのインストーラー本体、接続先管理サーバの情報を収めた.datファイル、インストール用のバッチファイルで構成され、1個のZIPファイルにアーカイブされています。

バッチファイルはIntuneのスクリプトには登録できないため、PowerShellで以下の処理を作成します。

  1. インストール済みかチェック
  2. PCにインストーラーをダウンロード
  3. ファイルを解凍
  4. インストール処理をキック

インストール処理はDesktopCentral純正のインストール用バッチファイルにmsiexeをキックするコマンドがズバリ書かれていたので流用です。

Invoke-WebRequestやExpand-Archiveではその処理が完了するまで待つために 「| out-null」を付加しています。

【サンプルコード】

##### Download and Install DesktopCentralAgent

#####インストール済みかチェック

$AlreadyResult = Get-ItemProperty "HKLM:SYSTEM\CurrentControlSet\Services\ManageEngine Desktop Central - Agent" -name Description -ErrorAction SilentlyContinue

if ( $AlreadyResult.Description -eq "ManageEngine Desktop Central - Agent"){
echo "Already Installed"
exit 0
}

#####ダウンロード用フォルダを作成
New-Item c:\Users\Public\tmp -itemType Directory -Force

cd c:\Users\Public\tmp

#####S3からインストーラーファイルをダウンロードして解凍
Invoke-WebRequest -Uri "https://smeuj3jslus4zs9er59nugve4q3s9ayv.s3-ap-northeast-1.amazonaws.com/DesktopCentralAgent.zip" -OutFile .\DesktopCentralAgent.zip | out-null

Expand-Archive -Path c:\Users\Public\tmp\DesktopCentralAgent.zip -DestinationPath c:\Users\Public\tmp | out-null

cd localsetup

#####インストーラーを起動 
msiexec.exe /i DesktopCentralAgent.msi TRANSFORMS="DesktopCentralAgent.mst" ENABLESILENT=yes REBOOT=ReallySuppress INSTALLSOURCE=Manual /lv Agentinstalllog.txt

exit $lastexitcode

これをDesktopCentralInstall.ps1として保存しておきましょう。

IntuneのPowerShellスクリプトに登録

IntuneにPowerShellスクリプトを登録します。登録方法の詳細は こちらの記事 を参考にしてください。

このスクリプトをログオンしたユーザーの資格情報を使用して実行する」を「いいえ」を指定します。

アプリのインストールを行うため管理権限で実行するのはMacと同じです。

スクリプトを登録してしばらくするとDesktopCentralAgentがインストールされていないPC上でサイレントインストールが始まり、アプリが常駐したことが確認できました!

Endpoint Manager admin centerのPowerShell管理画面でも動作が成功していることが確認できます。

さいごに

今回は一連の様々なアプリインストール方法の一つとして、任意の外部ストレージからでもインストールが可能なことを確認したものです。

スクリプトはあくまでIntuneの管理下で動き、PC上に残らないこともあり制御された状態で比較的安全にダウンロード、インストールが行えると言ってよいと思います。

これによりアプリ配布の自由度が広がるのではないでしょうか。

ただストレージのアクセス管理には注意が必要ですから、実際にこのような手法でアプリインストールを行う場合はセキュリティ上の検討を十分に行うことをお勧めします。

それではまた次の記事でお会いしましょう。

AzureAD&Intuneに関するまとめ記事

AzureAD&Intuneに関して、以下リンクから参照できます。

くらめその情シス:AzureADとIntuneを使ってPC管理を効率化してみた