アプリの配布のパッケージ アクションと検出ルール
アプリの配布がパッケージをどのように配布するかを定義するものがパッケージ アクションです。 アプリの配布がアプリをデバイスに配布すべきかどうかを決定する際の助けとなるのが、パッケージ検出ルールです。
パッケージ アクション
[アプリの配布] > [アプリ カタログ] でパッケージ アクションを構成します。 アプリを追加または編集し、[パッケージ] タブを選択します。 使用するアクションをドラッグし、ビルダ ツリーにドロップします。 ビルダ ツリーでアクションを選択して構成します。
たとえば次のようなパッケージ アクションを使用できます。
アプリが既にインストール済みであり、そのため再度インストールすべきではないかどうかの決定に役立ちます。
重要: true と解決された検出ステップがある場合、パッケージの処理が停止し、デバイスのアプリ状態は準拠と表示されます。
使用できる検出ルールの詳細については、このトピックで後述する「パッケージ検出ルール」をご参照ください。
: Ivanti アプリ配布の既定の作業パスである次の場所にファイルをダウンロードします。
C:\Program Data\Ivanti\Ivanti Cloud Agent\Agent\SWD\working
他のパスを指定しない限り、ファイル パスを受け入れるアクションでは、このパスが想定されます。 このフォルダは、各パッケージの実行前と実行後にクリアされます。
ここには複数のファイルを指定でき、必要であれば複数の「ファイルのダウンロード」アクションを設定できます。 ファイルをホストする場所は、認証を必要としない、配布先のクライアントがアクセスできる HTTP(S) ロケーションであれば、どこでもかまいません。
[ダウンロード元の URL] フィールドに URL を入力する、または貼り付けることができます。 指定する URL は、ダウンロードするファイルに直接リンクしている必要があります。 URL から検出されたファイル名が [ファイルを選択] ボタンの横に表示されます。
必要に応じて、[新しいファイルを追加] ボタンを使用して、さらにダウンロード ファイル URL を追加します。 ファイルが Microsoft Azure Blob Storage または Amazon Web Services バケットに保存されている場合は、[ファイルを選択] ボタンを使用してクラウドファイル エクスプローラーを開きます。
クラウドファイル エクスプローラー
[ファイルを選択] ボタンをクリックすると、[クラウドファイル エクスプローラー] が開き、組織の Microsoft Azure Blob Storage または Amazon Web Services バケットからファイルを選択できます。 Ivanti Neurons には Azure と Amazon のストレージ アカウントは含まれていません。
- Azure でストレージ コンテナを作成する方法については、こちらの Microsoft の記事をご参照ください。
- Amazon S3でのバケットの作成方法については、この Amazon 記事をご参照ください。
クラウドファイル エクスプローラーを使用する前に、[管理者] > [認証資格情報] で Azure Blob Storage または Amazon S3の認証資格情報を追加する必要があります。 詳細については、「認証資格情報」をご参照ください。 Azure では、Azure キーのローテーションを考慮して、Azure [key1] と Azure [key2] の両方について、Ivanti Neurons で認証資格情報を作成することを推奨します。 こうすることで、クラウドファイル エクスプローラーで目的のアカウントを選択できます。
フォルダやファイル リストへの自動入力の際にこれらの認証資格情報が使用されることで、ファイルのダウンロード アクションにおいて、選択したファイルの共有アクセス署名 URL (Microsoft Azure) または事前署名付き URL (Amazon Web Services) を取得できます。 クライアントは、これらの認証資格情報を使用しません。
認証資格情報を追加すると、クラウドファイル エクスプローラーでクラウド ストレージの [アカウント] と [コンテナ] または [バケット] を選択できます。 コンテナ ブラウザには、そこに保存されているファイルとフォルダが表示されます。 1つ以上のファイルを追加するには、ファイルの横のチェックボックスをオンにし、[追加] ボタンを選択します。 追加したファイルの URL は、[ファイルのダウンロード] アクション プロパティに表示されます。
クラウド ストレージ プロバイダは、生成された URL トークンに有効期限が設定されていることを要求します。 アプリの配布は、トークンの有効期限を7日に設定し、5日おきにトークンを更新して、ターゲット クライアントからのアクセスが失われるのを防ぎます。
[接頭語でフィルタリング] テキスト ボックスでのクラウドファイルのフィルタリングは、Microsoft と Amazon S3の API によって制限されています。 このフィルタは、選択したフォルダに限定されており、サブフォルダは含まれません。 入力するフィルタ テキストは、ファイル名 (大文字と小文字の区別あり) と正確に一致しており、目的のファイル名の先頭文字で始まっている必要があります。 完全なファイル名を含める必要はなく、先頭の数文字を入力するだけです。
[削除] を選択すると、選択したオブジェクト (ファイルまたはフォルダ) が削除されます。 削除をクリックする前に、オブジェクトが1つだけ選択されていることを確認してください。 一度に複数のオブジェクトを削除しようとすると、エラー メッセージが表示されます。 フォルダを削除する場合は、最初にそのフォルダの内容 (一度に1つのオブジェクト) を削除する必要があります。
Ivanti クラウド ストレージ
Ivanti では、バージョン2024.4で Ivanti クラウド ストレージのサポートを追加しました。このクラウド ストレージを使用して、配布するパッケージやファイルを保存できます。 これは、まだ Azure Blob Storage や Amazon S3ストレージのアカウントをお持ちでないお客様にとって役立ちます。
Ivanti クラウド ストレージを使用するにあたって追加の構成や認証資格情報は必要ありません。 各 Ivanti Neurons テナントには、それぞれ独自の Ivanti Azure ストレージ コンテナがあります。
アプリの配布の [ファイルのダウンロード] アクションで、クラウドファイル エクスプローラーにアクセスできます。 そこで、[アカウント] の下の [Ivanti ストレージ] を選択できます。 その後、[ファイルをアップロード] ボタンを使用して、配布するファイルをアップロードできます。 また、[削除] ボタンを使用してファイルを削除することもできます。
Ivanti クラウド ストレージの使用中は、次の項目を念頭においてください。
- Ivanti クラウド ストレージは、10 GB に制限されており、現在使用中の容量がクラウド ストレージ エクスプローラに表示されます。 このストレージ容量を増やすオプションはありません。
- ここでのファイル サイズは、2 GB を超えることはできません。
- Ivanti には、マルウェアがないかアップロードされたファイルをスキャンするサービスが組み込まれています。 マルウェアが検出されると、そのファイルは削除され、Ivanti Neurons の通知メッセージがその旨を知らせます。
- Ivanti クラウド ストレージを使用しているだけであれば、クロス オリジン リソース共有 (CORS) を構成する必要はありません。
- フォルダの作成はサポートされていません。
ファイルのアップロード
[ファイルをアップロード] ボタンを使用して、ファイルをブラウズし、選択したファイルをアップロードします。 アップロードしたファイルは、エクスプローラーで選択したフォルダに置かれます。 アップロードするファイルは、2GB 以下でなければなりません。 一度にアップロードできるファイルは1つだけです。 大量のファイルをアップロードすると完了まで時間がかかるため、アップロードしたファイルがエクスプローラーに即座には表示されない場合があります。
選択したファイルがアップロードできる状態になるまで進行状況バーが表示されます。 アップロード中は、処理中インジケータが表示されます。 アップロードが完了すると、アップロードの成功または失敗を示すメッセージが表示されます。
2 GB を超えるファイルをアップロードしたい場合は、Amazon または Azure のネイティブの管理ツールを使用してアップロードしてください。
ファイルをアップロードするには、その前に、クロス オリジン リソース共有 (CORS) を構成する必要があります。 ファイルのアップロードを試行しても、CORS が構成されていない場合は、最初に CORS を構成する必要があることを知らせるメッセージが表示されます。
Azure Blob Storage アップロード構成
Azure はコンテナ レベルではなく、アカウント レベルで CORS を構成します。 CORS の構成に関する Microsoft の情報はこちらにあります。
- 許可されるメソッド: PUT
- 許可されるヘッダー: content-type,x-ms-client-request-id,x-ms-useragent,x-ms-version
- 公開ヘッダー: Etag
- 許可される発信元: Ivanti Neurons ログイン ページのブラウザ URL 内に表示されるドメイン (ログイン後の URL ではない)。 これは、お使いのテナントがどこでホストされているかによって異なります。 たとえば、https://nvuprd-sfc.ivanticloud.com、https://ukuprd-sfc.ivanticloud.com などです。
Amazon S3アップロード構成
Amazon S3はアカウント レベルではなく、バケット レベルで CORS を構成します。 CORS の構成に関する Amazon の情報はこちらにあります。
- 許可されるメソッド: PUT
- 許可されるヘッダー: content-type
- 公開ヘッダー: Etag
- 許可される発信元: Ivanti Neurons ログイン ページのブラウザ URL 内に表示されるドメイン (ログイン後の URL ではない)。 これは、お使いのテナントがどこでホストされているかによって異なります。 たとえば、https://nvuprd-sfc.ivanticloud.com、https://ukuprd-sfc.ivanticloud.com などです。
SHA256ハッシュ値
ファイルのダウンロード オプションには、オプションのハッシュ値フィールドも含まれます。 ハッシュ値を指定した場合は、アプリの配布により、ダウンロードされたファイルのハッシュ値が検証されることになります。 値が一致しない場合は、ダウンロードされたファイルが削除され、配布が中止されます。 ピア ダウンロードのような高度な配布技術をアプリの配布で使用する場合は、ハッシュ値を指定してください。
普通の [実行] アクションでは、実行するファイル、コマンドライン、インストーラを実行すべきユーザのタイプを指定できます。 [MSI の実行] および [MSIX の実行] アクションを使用すると、MSI、MSP、および MSIX 固有の操作と表示オプションを選択できます。
フォルダの作成、ファイルの移動/コピー/削除、Zip 圧縮/解凍があります。
デバイスのエージェント ポリシーに従ってデバイスを再起動します。 再起動を必要とするアプリがある場合は、そのデバイスが再起動されるまで、そのデバイスに他のアプリをインストールすることはできません。
レジストリ キーを作成または削除します。 レジストリ値を設定または削除します。
バッチ ファイルまたは PowerShell スクリプトを実行します。 PowerShell Core オプションは、 PowerShell Core が欠落している場合にこれをインストールするわけではありません。 [自動] オプションは、最初に PowerShell Core を試行し、PowerShell Core がインストールされていない場合は PowerShell にフォールバックします。 このアクションにはスクリプト エディタが組み込まれています。 使用するスクリプト コードをこのエディタ内で追加する必要があります。
指定した秒数の間、パッケージの実行を一時停止します。 以前のアクションを完了するのに追加の時間が必要な場合にこれを使用します。
Windows パッケージ マネージャ (winget) を使用してパッケージを管理します。
このアクションは、[アプリ カタログ] のメイン ページで [アプリケーションを追加] > [Windows パッケージ マネージャ (winget)] を選択し、パッケージを選択すると、自動的に構成されます。 このアクションを機能させるのに、その他のアクションや変更は必要ありません。
必要に応じて、このアクションを手動で追加して構成できます。 このアクションは、他のアクションや検出ルールと組み合わせて使用することもできます。
winget の使用についての詳細は、この Microsoft トピックをご参照ください。
パッケージ マネージャを使用する場合は、管理対象デバイスに最新バージョンの winget があることが必要です。 管理対象デバイスで Microsoft Store を無効にしてあると、winget のバージョンが古い場合があり、それらのデバイスへのパッケージ マネージャの配布が失敗する可能性があります。 この問題を修正するには、winget バージョンを更新してパッケージを配布するか、Microsoft store を有効にします。
[パッケージ マネージャ オプション] パネルに含まれている [パッケージを選択] ボタンを使用すると、winget カタログで利用できるパッケージが表示されます。 これは、[アプリ カタログ] のメイン ページで[アプリケーションを追加] ボタンを使用したときに表示されるカタログと同じです。
アプリ カタログには、msstore リポジトリではなく、winget リポジトリ内にあるアプリのみが含まれます。 msstore のアプリ ID がある場合は、このセクションで後述するように、コマンド ラインの --id パラメータの後にその ID を手動で指定できます。
[パッケージを検索] ボックスにテキストを入力すると、カタログ内のすべてのパッケージに含まれているすべてのメタデータが検索されます。 特定のメタデータ カテゴリに含まれるパッケージ テキストを検索する場合は、検索ボックスを選択したときに表示されるサンプルのように、name:、published: などで検索を開始します。
アプリの配布では、カタログに表示されるバージョンとは関係なく、選択したパッケージの入手可能な最新バージョンがインストールされます。 アクションを手動で構成して、特定のバージョンをインストールすることもできます。
カタログで winget パッケージを選択すると、そのパッケージをインストールするための [コマンドライン引数] が自動入力されます。 このコマンド ラインは、必要に応じて変更できます。
典型的な winget コマンド ラインは次のとおりです。
install -e --id GitHub.GitHubDesktop --accept-package-agreements --accept-source-agreements --silent
アプリ カタログにリストされていないパッケージをインストールする場合は、独自の winget コマンド ラインを作成できます。 Windows コマンド プロンプトで winget search <query> コマンドを実行すると、一致するパッケージのリストが返されます。 Id 列で目的のパッケージの文字列を見つけ、winget コマンド ラインでその文字列を --id パラメータの後ろに追加します。
パッケージを成功させるためにはユーザがログインしなければならないため、Winget はユーザ コンテキスト下でのみ実行されます。 さらに、一部のインストール パッケージでは、ローカル管理者権限を持つユーザが正常にパッケージを実行する必要があります。
winget パッケージの作成者が、user (ログイン ユーザ)、machine (すべてのユーザ)、または null (指定なし) のいずれかに範囲を絞ったパッケージにインストーラを組み込んでいる場合があります。 既定では winget は、デバイスに最も適合する項目を取得しようとし、通常これは user です。
コマンド ラインで --scope パラメータを使用して範囲を指定することで、この自動的な選択を上書きできます。 たとえば、あるデバイス上のすべてのユーザ用にパッケージをインストールする場合は、winget コマンド ラインで --scope machine を含めます。 コンピュータ範囲をサポートしていないパッケージの場合、コマンドラインにこのパラメータを含めると、パッケージのインストールが失敗しますので注意してください。
いつものように、必ずコマンド ラインをテストしてから、パッケージを配布するようにしてください、
パッケージ検出ルール
パッケージ検出ルールは、パッケージが既にインストール済みであり、そのため再度インストールすべきではないかどうかの決定に役立ちます。
[アプリの配布] > [アプリ カタログ] でパッケージ検出ルールを構成します。 アプリを追加または編集し、[パッケージ] タブを選択します。 [検出] 配布前アクションをビルダ ツリーに追加し、これを選択して構成します。
検出ルールは、パッケージの処理の開始時にのみチェックされますので、検出アクションを使用する場合は常に、ビルダ内の最初の項目が検出アクションです。 検出ルールは、定義された順序で実行されます。
重要: true と解決された検出ステップがある場合、パッケージの処理が停止し、デバイスのアプリ状態は準拠と表示されます。
たとえば次のような検出ルールを使用できます。
完全なファイル パスとファイル名を指定します。 [存在する] または [存在しない] のいずれかを選択します。
ファイルのバージョン情報は通常、実行可能ファイルについてのみ利用できます。 アプリの配布では、「製品バージョン」値ではなく「ファイル バージョン」値が使用されます。 完全なファイル パスとファイル名を指定します。 演算子は、「より小さい」、「より大きい」、「等しい」、または「次の範囲にある」のバリアントにすることができます。 指定したファイルとパスが存在しない場合、またはファイルに解析可能なバージョンがない場合は、false が返されます。
バージョン演算子と比較演算子の仕組みの詳細については、Microsoft のこの記事をご参照ください。
完全なファイル パスとファイル名を指定します。 ファイル サイズをバイト単位で指定します。 アプリの配布では、「ディスク上のサイズ」ではなく「サイズ」が使用されます。指定したファイルとパスが存在しない場合は、false が返されます。
完全なファイル パスとファイル名を指定します。 比較する SHA-2ビット長を選択します。 指定したファイルとパスが存在しない場合は、false が返されます。 次のように、PowerShell を使用してハッシュ ダイジェストを生成できます。
-
Get-FileHash -Algorithm SHA256 -Path C:\MyApp\myfile.exe
このルールが調べるのは日付のみであり、時刻ではありません。 完全なファイル パスとファイル名を指定します。 [次の値に等しい] のような演算子を選択します。 ファイルの日付は、ロケールの mm/dd/yyyy 形式に相当する UTC (協定世界時) で指定する必要があります。 アプリの配布では、「作成」日ではなく「変更」日が使用されます。 指定したファイルとパスが存在しない場合は、false が返されます。 次のように、PowerShell を使用してファイルの日付を UTC で取得できます。
-
(Get-Item C:\MyApp\myfile.exe).LastWriteTimeUtc
MSI 製品コード GUID を入力し、MSI が [インストールされている] または [インストールされていない] を選択します。 Microsoft の Orca ツールを使用して、「製品コード」GUID を表示します。 次のレジストリ キーの下で、インストールされている MSI GUID を確認することもできます。
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
- HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
- HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
MSIX パッケージのフル ネームを入力し、MSIX が [インストールされている] または [インストールされていない] を選択します。 Microsoft がここで説明しているように、PowerShell の Get-AppxPackage コマンドを使用してパッケージのフル ネームを検索します。
検出するキーのレジストリ キー情報を指定します。
- レジストリ バージョン: [32 ビット] または [64 ビット] を適切に選択するか、ターゲットのデバイスが使用しているバージョンと自動的に一致させたい場合は [システム] を選択します。
- ルート キー: HKEY_LOCAL_MACHINE など、検出するキーを含むルート キーを選択します。
- キー: 検出するレジストリ キー名へのフル パス (既に指定したルート キーは含めないでください) を入力します。
- [存在する] または [存在しない] を指定します。
検出する値のレジストリ キーと値の情報を指定します。 キーまたは値が存在しないか、ユーザがアクセスできない場合、ルールは false を返します (比較演算子が [存在しない] でない限り)。
値の名前を指定する必要がありますが、「(既定)」値を確認する場合は空白のままにしておく必要があります。
バージョン比較を行う場合、比較オペランドと、レジストリ値に関連付けられたデータは、ここで説明されているバージョン形式であることが必要です。 これらのいずれかが満たされていない場合、検出ルール (およびパッケージ) によってエラーが生成されます。
バージョン演算子と比較演算子の仕組みの詳細については、Microsoft のこの記事をご参照ください。
文字列比較では大文字と小文字が区別されます。 レジストリ値に REG_SZ (文字列) 型ではないデータが含まれている場合は、次のように文字列に変換されます。
- REG_DWORD: (regedit.exe に示されている) 10進数形式が使用されます。
- REG_QWORD: (regedit.exe に示されている) 10進数形式が使用されます。
- REGBINARY: regedit.exe で使用されるバイト ペア形式が使用されますが、大文字になります (例: 「46 AA 6C 6B 65 6E」)。
- REG_MULTI_SZ: 行はスペースで連結されて1つの行を形成します (例:「Line1 Line2 Line3」)。
- REG_EXPAND_SZ: すべての環境変数が展開されます。
検出スクリプトでは、PowerShell (PowerShell Core ではない) またはバッチ構文を使用できます。 検出の成功は、スクリプトの数値終了コードに基づきます。 終了コード「0」(ゼロ) は true に相当します。 その他の終了コードはすべて false と見なされます。 終了コードは「True」ではなく数値である必要があります。 組み込みのスクリプト エディタを使用してスクリプトを作成します。
組み込みのスクリプト エディタを使用してスクリプトを作成するか、[ファイルを選択] オプションを使用してファイルを参照することもできます。 指定するファイルとパスはターゲット システム上に存在する必要があります。 スクリプト ファイルがまだデバイス上にない場合は、 [ファイルのダウンロード] アクションを使用して、スクリプト ファイルをデバイスに配置します。 これを行うと、ダウンロードされたファイルは既定のパスに配置されるので、ファイル名を指定するだけで済みます。
検出ルールは他のパッケージ アクションの前に実行されるため、検出ルール スクリプトはアプリ インストール プロセス内の独自のステージに配置されます。 ここでは、古いアプリのインストールを検索し、見つかった場合はアンインストールしてからパッケージの残りの部分に進むような、カスタマイズされたアップグレード スクリプトを実行するなど、より複雑な操作を行うことができます。
検出ルールとアクション ロギング
アプリの配布では、デバイスに配布されたアプリごとにログ ファイルが作成されます。 ログには、各検出ルールおよびその他のパッケージ アクションのエントリが含まれます。 検出ルールが期待どおりに機能しない場合は、ログ ファイルを使用して理由を特定してください。 ログは各デバイスの次のフォルダに保存されます。
- C:\ProgramData\Ivanti\Ivanti Cloud Agent\Logs\SWDApps
各ログ ファイル名にはパッケージ GUID が含まれます。 [アプリ カタログ] でパッケージを編集すると、Web ブラウザーの URL でパッケージの GUID を確認できます。 これは、関心のあるログ ファイルを見つけるのに役立ちます。
簡易ログは、[アプリの配布] > [配布ステータス] ページからリモートで表示できます。 表示したいデバイスとパッケージを見つけて、右側でアクション メニューの [ログを表示] オプションを選択します。