Microsoft Intuneのカスタム コンプライアンス検出スクリプト
Microsoft Intuneのコンプライアンスにカスタム設定を使用する前に、デバイスで使用できるカスタム コンプライアンス設定を検出できるスクリプトを定義する必要があります。 使用するスクリプトは、プラットフォームによって異なります。
- Windows デバイスでは、PowerShell スクリプトが使用されます。
- Linux デバイスは、対応するインタープリターがデバイスにインストールされ、構成されている限り、任意の言語でスクリプトを実行できます。
検出スクリプトは、カスタム コンプライアンス ポリシーの一部としてデバイスにデプロイされます。 コンプライアンスがデバイスで実行されると、スクリプトはカスタム コンプライアンス ポリシーを通じて指定した JSON ファイルによって定義された設定を検出します。
すべての検出スクリプト:
- コンプライアンス ポリシーを作成する前に、Intuneに追加されます。 追加後、カスタム設定を使用してコンプライアンス ポリシーを作成するときにスクリプトを選択できます。
- 各検出スクリプトは 1 つのコンプライアンス ポリシーでのみ使用でき、各コンプライアンス ポリシーに含めることができる検出スクリプトは 1 つだけです。
- コンプライアンス ポリシーに割り当てられている検出スクリプトは、そのスクリプトがポリシーから割り当てられていない限り削除できません。
- コンプライアンス ポリシーを受け取るデバイスで実行します。 スクリプトは、カスタム コンプライアンス ポリシーの作成時にアップロードする JSON ファイルの条件を評価します。
- JSON で定義されている 1 つ以上の設定を特定し、それらの設定の検出された値の一覧を返します。 1 つのスクリプトを各ポリシーに割り当てることができ、複数の設定の検出をサポートします。
さらに、Windows 用の PowerShell スクリプトは次のとおりです。
- 出力結果を 1 行に圧縮する必要があります。
- たとえば、
$hash = @{ Manufacturer = $WMI_ComputerSystem.Manufacturer; BiosVersion = $WMI_BIOS.SMBIOSBIOSVersion; TPMChipPresent = $TPM.TPMPresent}
スクリプトの末尾に次の行を含める必要があります。return $hash | ConvertTo-Json -Compress
制限
コンプライアンス データを正常にIntuneに返すには、記述するスクリプトが次の制限内にある必要があります。
- スクリプトは、それぞれ 1 メガバイト (MB) 以下にすることができます。
- 各スクリプトによって生成される出力は、1 MB 以下にすることができます。
- スクリプトの実行時間は制限されている必要があります。
- Linux では、スクリプトの実行に 5 分以下かかる必要があります。
- Windows では、スクリプトの実行に 10 分以下かかる必要があります。
Windows 用のサンプル検出スクリプト
次の例は、Windows デバイスで使用できる PowerShell スクリプトの例です。
$WMI_ComputerSystem = Get-WMIObject -class Win32_ComputerSystem
$WMI_BIOS = Get-WMIObject -class Win32_BIOS
$TPM = Get-Tpm
$hash = @{ Manufacturer = $WMI_ComputerSystem.Manufacturer; BiosVersion = $WMI_BIOS.SMBIOSBIOSVersion; TPMChipPresent = $TPM.TPMPresent}
return $hash | ConvertTo-Json -Compress
Windows のサンプル スクリプトの出力例を次に示します。
{"BiosVersion":"1.24","Manufacturer":"Microsoft Corporation","TPMChipPresent":true}
Linux 用のサンプル検出スクリプト
注:
Linux の検出スクリプトはユーザーのコンテキストで実行されるため、昇格が必要なシステム レベルの設定にチェックすることはできません。 この例は、/etc/sudoers
ファイルのstate/hash
です。
Linux 用の検出スクリプトは、要件を満たす任意のインタープリターを呼び出すことができます。 スクリプトをデプロイする前に、選択したインタープリターがターゲット デバイスに適切にインストールされ、構成されていることを確認します。 スクリプトのインタープリターを指定するには、スクリプトの先頭にインタープリター バイナリへのパスを示す shebang 行を含めます。
たとえば、スクリプトで Bash シェルをインタープリターとして使用する必要がある場合は、スクリプトの上部に次の行を追加します。
[ !/bin/bash ]
スクリプトに Python を使用する場合は、インタープリターがインストールされている場所を指定します。 たとえば、スクリプトの先頭に次を追加します。 [ !/usr/bin/python3 ]
または [ !/usr/bin/env python ]
推奨されるベスト プラクティス: スクリプトで割り込みやキャンセルシグナルなどのシナリオを処理できるようにするには、正常な終了メカニズムを実装します。 スクリプトがこれらのシグナルを適切にキャッシュして処理すると、スクリプトはクリーンアップ タスクを実行し、正常に存在し、リソースが正しく解放されるようにすることができます。 たとえば、SIGINT (割り込みシグナル) や SIGTERM (終了信号) などの特定のシグナルをキャッチし、これらのシグナルを受信したときに実行するカスタム アクションを定義できます。 これらのアクションには、開いているファイルを閉じる、取得したロックを解放する、一時的なリソースをクリーンアップするなどがあります。 シグナルの適切な処理は、スクリプトの整合性を維持し、全体的なユーザー エクスペリエンスを向上させるのに役立ちます。
詳細については、「Intune Linux カスタム コンプライアンス サンプル ガイド」を参照してください。
検出スクリプトをIntuneに追加する
運用環境にスクリプトをデプロイする前に、分離された環境でスクリプトをテストして、使用する構文が期待どおりに動作することを確認します。
管理センター Microsoft Intuneサインインし、[Endpoint security>Device compliance>Scripts>Add>(プラットフォームを選択)に移動します。
[ 基本] で 、名前を指定します。
[ 設定] で、スクリプトを [検出スクリプト] に追加します。 スクリプトを慎重に確認します。 Intuneでは、スクリプトで構文エラーやプログラムによるエラーが検証されません。
[Windows のみ ] - [設定] で、PowerShell スクリプトに対して次の動作を構成します。
- ログオンした資格情報を使用してこのスクリプトを実行します 。既定では、スクリプトはデバイス上のシステム コンテキストで実行されます。 ログオン ユーザーのコンテキストで実行するには、この値を [はい] に設定します。 ユーザーがログインしていない場合、スクリプトは既定でシステム コンテキストに戻ります。
- スクリプト署名チェックを適用する – 詳細については、PowerShell ドキュメントの「about_Signing」を参照してください。
- 64 ビット PowerShell ホストでスクリプトを実行 する – 既定では、スクリプトは 32 ビットの PowerShell ホストを使用して実行されます。 代わりに 64 ビット ホストを使用してスクリプトを強制的に実行するには、この値を [はい ] に設定します。
スクリプト作成プロセスを完了します。 このスクリプトは、Microsoft Intune管理センターの [スクリプト] ウィンドウに表示され、コンプライアンス ポリシーを構成するときに選択できるようになりました。
これらのスクリプトをMicrosoft Intune管理センターにアップロードするワークフローではスコープ タグがサポートされていないため、カスタム コンプライアンス検出スクリプトを作成、編集、または表示するには、既定のスコープ タグを割り当てる必要があります。