Microsoft Intune 用のカスタム コンプライアンス検出スクリプト

Microsoft Intune に準拠するためのカスタム設定を使用するには、その前に、デバイス上のカスタム コンプライアンス設定を検出するスクリプトを作成する必要があります。 使用するスクリプトは、プラットフォームによって異なります。

  • Windows デバイスでは PowerShell スクリプトを使用します。
  • Linux デバイスは、対応するインタープリターがデバイスにインストールおよび構成されている限り、任意の言語でスクリプトを実行できます。

検出スクリプトは、カスタム コンプライアンス ポリシーの一部としてデバイスに展開されます。 デバイスでコンプライアンスが実行されている場合、スクリプトは、コンプライアンス ポリシーの作成時に指定した JSON ファイルに定義された設定を検出します。

すべての検出スクリプト:

  • コンプライアンス ポリシーを作成する前に Intune に追加されます。 スクリプトを追加した後は、カスタム設定を使用してコンプライアンス ポリシーを作成するときに選択できるようになります。
    • 各検出スクリプトは 1 つのコンプライアンス ポリシーでのみ使用でき、各コンプライアンス ポリシーに含めることができる検出スクリプトは 1 つだけです。
    • コンプライアンス ポリシーに割り当てられている検出スクリプトは、ポリシーからスクリプトの割り当てを解除するまで削除できません。
  • コンプライアンス ポリシーを受け取るデバイスで実行します。 このスクリプトは、カスタム コンプライアンス ポリシーを作成するときにアップロードする JSON ファイルの状態を評価します。
  • JSON で定義されている 1 つ以上の設定を特定し、それらの設定で検出された値のリストを返します。

さらに、Windows 用の PowerShell スクリプト:

  • 結果を 1 行に出力するように圧縮する必要があります。 たとえば、次のスクリプトでは、最後の行に return $hash | ConvertTo-Json -Compress を含める必要があります。

    $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 python3

ヒント

割り込みまたはキャンセル信号を処理するために、スクリプトに正常終了メカニズムを実装します。 スクリプトは、これらのシグナルを処理するときに、クリーンアップ タスクを実行して正常に終了し、リソースが正しく解放されるようにすることができます。 たとえば、SIGINT (割り込み信号) や SIGTERM (終了信号) などの信号をキャッチし、受信時に実行するカスタム アクションを定義します。 これらのアクションには、開いているファイルの閉じ、取得したロックの解放、一時リソースのクリーンアップが含まれます。

詳細については、「Intune Linux カスタム コンプライアンス サンプル ガイド」を参照してください。

検出スクリプトを Intune に追加する

スクリプトを運用環境にデプロイする前に、分離された環境でテストして、使用する構文が期待どおりに動作することを確認します。

注:

スクリプトのアップロード ワークフローでは、スコープ タグはサポートされていません。 カスタムのコンプライアンス検出スクリプトを作成、編集、または表示するには、既定のスコープ タグが割り当てられている必要があります。

  1. Microsoft Intune 管理センターにサインインし、[エンドポイント セキュリティ]>デバイス コンプライアンス>スクリプト>追加 に移動します。 次に、プラットフォームを選択します。

  2. [ 基本] で、スクリプトのわかりやすい 名前 を入力します。

  3. [ 設定] で、スクリプトを 検出スクリプトに追加します。 スクリプトを注意深く確認してください。 Intune では、スクリプトの構文やプログラミング エラーは検証されません。

  4. Windows の場合のみ - [設定] で、PowerShell スクリプトに対して次の動作を構成します。

    • ログオンした資格情報を使用してこのスクリプトを実行します。 既定では、スクリプトはデバイスのシステム コンテキストで実行されます。 ログオンしているユーザーのコンテキストで実行するには、この値を Yes に設定します。 ユーザーがログインしていない場合、スクリプトは既定で System コンテキストに戻ります。
    • スクリプト署名チェックを適用する – 詳細については、PowerShell ドキュメントの about_Signing を参照してください。
    • 64 ビットの PowerShell ホストでスクリプトを実行する – 既定では、スクリプトは 32 ビットの PowerShell ホストを使用して実行されます。 代わりに 64 ビット ホストを使用してスクリプトを強制的に実行するには、この値を Yes に設定します。
  5. スクリプト作成プロセスを完了します。 スクリプトは、[ スクリプト] ウィンドウに表示され、コンプライアンス ポリシーを構成するときに選択できます。

次の手順