この文書では特定のケースでカスタムインベントリルールを使用する例について説明します。
カスタムインベントリの概要と設定手順については 「カスタムインベントリルールを用いたソフトウェアアイテムの作成手順 (4252712)」をご参照ください。
[シナリオ]
(Windows 7, Windows 8.x を想定しています) Internet ExplorerはOSコンポーネントではなく個別のアプリケーションであるため、マシンごとに確認する必要があります。
しかし、コントロールパネル|プログラムと機能|プログラムアンインストールまたは変更 のメニューからアンインストール可能なプログラムの一覧に表示されるわけではなく、デバイスインベントリのソフトウェアセクションにある「インストールされているプログラム」にも表示されません。
[問題点]
インストール済みのInternet Explorerはソフトウェアインベントリに登録されません。
[解決策]
K1000でIEのバージョンを集めるには以下のルールが使用できます。
カスタムインベントリルール(論理行一行で記述): FileInfoReturn(C:\Program Files\Internet Explorer\iexplore.exe, ProductVersion, TEXT) 
ファイル情報を読み取りに成功すると デバイスインベントリ詳細 ソフトウェアのインストール済みプログラムにこのカスタムインベントリルール付きのソフトウェアアイテムが追加されます。
さらに、FileInfoReturnは値返却ルールであるため、カスタムインベントリフィールドに値が保存されます。
-> 現在 Internet Explorerは使用されないためあまり意味がありません。
パスを C:\Program Files {{op}}x86{{cp}}\Microsoft\Edge\Application\msedge.exe  に置き換えてEdgeの製品バージョンを取得することもできます。
またソフトウェアカタログインベントリのアイテムから参照することができます。
ソフトウェアカタログから特定のソフトウェアを持つデバイスをリストするレポート (4264738)
[シナリオ]
プログラムによってはマイナリリースごとにインストール先フォルダ名が変わるものがあります。
[解決策]
引数にファイルパスを取る多くのルール(FileExists等)では固定パスとなるためパスにバージョンを決め打ちします。
一定のパターンの範囲(文字列)で同一アイテムと見なしたい場合には FilenamesMatchingRegex~で始まるルールを使用できます。
例
カスタムインベントリルール(論理行一行で記述): FilenamesMatchingRegexReturn (C:\Program Files\Amazon Corretto\,jdk17.* ,TEXT)
この例では値が返却されるため、カスタムインベントリフィールドにマッチしたファイル名(フォルダ名)が登録されます。
 
[シナリオ]
ソフトウェアアイテムのタイトルにバージョン情報が含まれている場合にはソフトウェアタイトルからバージョン情報を含めた検索ができます。(例:Java 7 Update 76, Java 8 Update 31等)
しかし、ソフトウェアの表示名(タイトル)にはバージョンが含まれず、詳細なバージョン情報がバージョン用のフィールドに格納している場合にはKACEのコンピュータ(デバイス)の検索からは一致させることができません。
例として、Microsoft EdgeやGoogle Chromeがあります。
- 表示名:Google Chrome,  バージョン:127.0.6533.101
- 表示名:Google Chrome,  バージョン:120.0.6099.129
いずれも タイトルはGoogle Chromeであるため、127.0.6533.101と、古い120.0.6099.129を区別したいと考えています。
【ソフトウェアタイトル】【=】"Google Chrome"    および
【ソフトウェアのバージョン】【<(アルファベット順)】 "120.0.6099.129"
 
[問題点]
上記のような検索フィルタは必ずしも期待した検索結果を返しません。
このフィルタは Google Chrome の127.0.6533.101 (120.0.6099.129より大きい=新しい)を持っているならばヒットしないことを期待して設定されましたが、このPCを表示してしまいます。
デバイスが以下のソフトウェアの組み合わせを持っているような場合がこのような状況を引き起こします。
- 表示名: Google Chrome,  バージョン:127.0.6533.101
- 表示名: SoftwareAAA(任意のソフトウェア) ,バージョン 10
つまり、実際には「120.0.6099.129より古い"Google Chrome"を持っているコンピュータ」を検索しているわけではなく、
「"Google Chrome"というタイトルのソフトウェアを持ち」かつ 「"120.0.6099.129"より小さいバージョンの任意のソフトウェアを持っている」デバイスを抽出していることになります。※
※ 補足:  ソフトウェアタイトル(DISPLAY_NAME)とバージョン(DISPLAY_VERSION)をつなげて抽出する次のようなクエリを(管理者からは)期待されます。
しかし残念ながら実装上は次のようにソフトウェアタイトル(DISPLAY_NAME列)とバージョン(DISPLAY_VERSION列)の間で両者の関係を考慮しない検索を行います。SELECT MACHINE.ID FROM MACHINE WHERE ( EXISTS ( select 1 from SOFTWARE, MACHINE_SOFTWARE_JT where MACHINE_SOFTWARE_JT.MACHINE_ID = MACHINE.ID AND SOFTWARE.ID = MACHINE_SOFTWARE_JT.SOFTWARE_ID and SOFTWARE.DISPLAY_NAME like 'Google Chrome' and SOFTWARE.DISPLAY_VERSION < '120.0.6099.129' ) )
SELECT MACHINE.ID FROM MACHINE WHERE ( EXISTS ( select 1 from SOFTWARE, MACHINE_SOFTWARE_JT where MACHINE_SOFTWARE_JT.MACHINE_ID = MACHINE.ID AND SOFTWARE.ID = MACHINE_SOFTWARE_JT.SOFTWARE_ID and SOFTWARE.DISPLAY_NAME like 'Google Chrome' ) ) AND ( EXISTS ( select 1 from SOFTWARE, MACHINE_SOFTWARE_JT where MACHINE_SOFTWARE_JT.MACHINE_ID = MACHINE.ID AND SOFTWARE.ID = MACHINE_SOFTWARE_JT.SOFTWARE_ID and SOFTWARE.DISPLAY_VERSION < '120.0.6099.129' ) )
この挙動に対しては 修正要求番号 K1-21055 が提出されています。将来の修正を希望される場合、技術サポートケースを作成しお知らせください。レポート作成機能にも同様の問題はあり、レポートについては以下のKB記事で回避策が提供されています。
[解決策]
特定バージョンより古い、または、より新しいソフトウェアを持っていることを認識させるために以下のようなルールを使用することができます。
レジストリ情報を利用するカスタムインベントリルール(論理行一行で記述): 
RegistryValueLessThan(HKLM\SOFTWARE\AAAAA\FFFFFF, Version, 120.0.6099.129)
(RegistryValueGreaterThan,RegistryValueEqualsも同じ引数で使用できます)
ファイル情報(ProductVersion)を利用するカスタムインベントリルール(論理行一行で記述): 
ProductVersionLessThan(C:\Program Files\AAAAA\FFFFFF\App.exe, 120.0.6099.129)
 (ProductVersionGreaterThan,ProductVersionEqualsも同じ引数で使用できます)
名前をCIR-SW-LTXXXXX などのようにしておけば、この条件に該当するソフトウェアを持っている絞り込みを行うコンピュータラベルを作成できます。
(ラベルCIR-GC-LT120.0.6099.129 を持つデバイス = Chromeバージョンが120.0.6099.129より小さいデバイス  を選択できるようにする)
   [ソフトウェア]ソフトウェアタイトル  =  CIR-GC-LT120.0.6099.129
[シナリオ]
管理対象インストールを作成するには、ソフトウェアインベントリアイテムにインストーラーのファイルを割り当てる必要があります。
管理対象インストールは、インストールを行うべきかどうかの判断に、デバイスのインベントリの結果に指定されているソフトウェアが含まれているかどうかを根拠としており、インベントリ結果に含まれていなければ再度(有効状態に設定されている管理対象インストールは)インストールを試みる動作を行います。
通常はソフトウェアインベントリアイテムを特定する条件は以下3つから成り立ちます。
「タイトル」「ベンダー(製造元)」「バージョン」
あるソフトウェア(バージョン10.1)をインストールした時点では、管理対象インストールに割り当てたソフトウェアインベントリアイテムの情報と一致していました。
ある日そのソフトウェアにパッチ更新が適用されたことでバージョン情報が 10.2 へ変わってしまいました。
その後のインベントリ周期で、最初にインストールされた「ソフトウェア(10.1)」はインベントリ情報に含まれなくなるため SMA からは、
そのデバイスに ソフトウェア(10.1) は "インストールされていない" と判断されました。
結果、再び(有効状態の)管理対象インストールが開始されてしまいました。
[問題点]
パッチ適用などで管理対象インストールのソフトウェアアイテムの情報と、実際にインストールされているバージョンが異なる状態が生まれると、
管理対象インストールは、そのソフトウェアがシステムに「インストールされていない」と見做してインストールを開始します。
インストーラーやシステムの制限により実際の実行は抑制されたり、管理対象インストールの無効化や試行回数の調整により制限することもできますが
不要な処理の発生は好ましくありません。
[解決策]
カスタムインベントリルールを使用してそのソフトウェアがインストールされているかどうかを独自に判断するようにします。
そのソフトウェアが C:\Program Files (x86)\App\Folder\AAA\app.exe にインストールされ、バージョンが変わってもこのファイル名は変わらないのであれば、このファイルが指定したパスに存在していることがインストールされている指標にできるといえます。
カスタムインベントリルール(論理行1行で記述):FileExists(C:\Program Files {{op}x86{{cp}}\App\Folder\AAA\app.exe)
メモ: {{op}}、 {{cp}}はそれぞれ ( と ) のエスケープ表現
(ユーザープロファイルのAppDataへのインストールではなく.msiから)システムにインストールされたGoogle Chromeの有無については次のように記述できます。
FileExists(C:\Program Files\Google\Chrome\Application\chrome.exe)
例として紹介しましたが、いずれのシナリオにおいてもカスタムインベントリを用いて得たい情報を引き出す場合に、どのような項目(ファイルやレジストリ)を取得すべきかについてはお客様にて調査・確認していただく必要があります。
アプリケーションによってはソフトウェアカタログインベントリ(デバイス | ソフトウェアカタログ )によってマイナーバージョンの差を吸収することもできますが、手動で調整をしたい場合にはカスタムインベントリルールを持たせたソフトウェアインベントリの利用が効率的です。