【Q&Aコーナー】Intuneプロアクティブな修復を利用してインベントリを収集

皆さんこんにちは。国井です。
今日はインベントリ(ハードウェア/ソフトウェア情報)をMicrosoft Intuneで扱う方法についてです。
Intuneでは登録されたデバイスのインベントリを自動的に収集する機能があり、
結果はIntune管理センターから個々のデバイスを参照することでご覧いただけます。
しかし、インベントリ機能で集めてきてくれる情報と私たちが知りたい情報にはどうもギャップがあるようで、色々とご質問をいただくことが多いのです。その中のひとつにこうしたものがあったので共有させてください。

デバイス上のアプリケーションがインストールされた日を知りたいです。
Intuneから展開されたかに関わりなく知りたいです。

確かにIntuneからアプリを展開していれば、展開結果からインストールされた日を知ることはできます。
しかしIntune経由でインストールしていないアプリケーションも多いのでは?
そういうときにはプロアクティブな修復を使って情報収集をしましょう。

プロアクティブな修復とは

公式サイト詳しい解説があったりするので詳しくはそちらを見ていただくとして
簡単に説明すると、Windows PowerShellスクリプトで特定の設定した条件をクリアできないデバイスの場合、別のスクリプトを使って条件をクリアするように特定の設定を矯正する、というものです。
プロアクティブな修復では条件をチェックするスクリプトを検出スクリプト
設定を矯正するスクリプトを修復スクリプトと呼ぶのですが、
この2つは必ずしもセットで使わなければならないわけではなく、検出スクリプトだけを単体で使うことも可能です。そして検出スクリプトだけを単体で利用するメリットはスクリプトの実行結果による条件をクリアしているかどうかを画面上で確認できることにあります。
例えば、こちらのプロアクティブな修復画面では検出スクリプトを実行した結果、条件をクリアしているデバイスは1台、そうでないデバイスは3台あることがわかります。

image

アプリケーションがインストールされた日を調べる

では本題に入りましょう。
アプリケーションがインストールされた日はWindowsの場合、設定アプリ > アプリ > アプリと機能 から確認できます。

image

これをWindows PowerShellからコマンドレットを実行して調べる場合、
Get-WmiObject –Class Win32_Product を利用します。
実行結果からInstallDate属性がインストールされた日になります。
実際に Get-WmiObject –Class Win32_Product | ft Name, InstallDate と実行した結果がこちら。

image

8桁の数字(YYYYMMDD)でインストールされた日が入っていることがわかります。

インストールされた日を調べる検出スクリプトを作成

インストールされた日の調べ方がわかったら検出スクリプトを作りましょう。
ここでは2022年以前にMicrosoft Exact Data Match Upload Agentをインストールしたデバイスを調べるスクリプトを作ってみましょう。検出スクリプトではスクリプトを実行した結果、1という値を返せば正常、0という値を返せば異常という判断をします。そのため、スクリプト内で条件分岐を設定し、正常な結果であれば1の値を返すように設定すればよいのです。

if (Get-WmiObject –Class Win32_Product | where {($_.Name –match “Microsoft Exact Data Match Upload Agent”) -and ($_.InstallDate –ge 20220101)})
{
Write-Host "Match"
exit 1
}
else{
Write-Host
"No_Match"
exit 0
}

このスクリプトでは1行目のif(   )の部分で、アプリの名前がMicrosoft Exact Data Match Upload Agentでインストールした日が2022年1月1日以降だったらという条件を作成し、合致すれば何かしら値が返ってくるので3~4行目の処理を行います。合致する場合は4行目に書かれたexit 1を実行し、1という値を返します。そしてそうでなければexit 0なので0という値を返します。この結果、1の値を返したデバイスは「問題なし」として分類、0の値を返したデバイスは「問題あり」として分類されます。
このスクリプトをps1ファイルとして保存し(ANSI形式で保存することを忘れずに)、プロアクティブな修復の検出スクリプトとして登録します。

image

これで後はデバイス上でスクリプトが実行されるのを待つだけです。
なお、割り当て設定ではスクリプトの実行間隔を設定できます。
1時間ごとに繰り返すと設定すれば、この設定を作った1時間後に結果がわかるかって?
それは違います。だってクライアントがIntuneと通信する間隔そのものが8時間ごとですから。ということで気長に待ちましょう。
image

まとめ

このようにプロアクティブな修復を利用すれば、Intuneが収集するインベントリ情報ではわからないような情報もWindows PowerShellスクリプトを使って調べることができます。
確かにMECMを利用している方や他社のMDMを使った経験のある方だとIntuneが集めてくるインベントリには物足りなさを感じる人もいると思います。
しかし、調べたいことがあればGet-WmiObjectコマンドレットをクライアント上で実行するスクリプトを送り込めば、(面倒ではありますが)ある程度の情報収集はできるので、どうしても!ということであれば、こうした手を使うのもひとつの方法でしょう。
ただ最大の難点はこの機能がMicrosoft 365 E3が必要ってことなんですけどね..