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

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

  • Linux デバイス、POSIX 準拠シェル スクリプトを使用する
  • Windows デバイスで PowerShell スクリプトを使用する

スクリプトは、カスタム コンプライアンス ポリシーの一部としてデバイスにデプロイされます。 コンプライアンスが実行されると、スクリプトは、カスタム コンプライアンス ポリシーを通じて指定した JSON ファイルによって定義されている設定を検出します。

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

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

さらに、Windows 用の PowerShell スクリプトは次のとおりです。

  • 出力結果を 1 行に圧縮する必要があります。 例: $hash = @{ ModelName = "Dell"; BiosVersion = "1.24"; TPMChipPresent = $true}
  • スクリプトの最後に次の行を含める必要があります。 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 = @{ ModelName = $WMI_ComputerSystem.Model; BiosVersion = $WMI_BIOS.SMBIOSBIOSVersion; TPMChipPresent = $TPM.TPMPresent}
return $hash | ConvertTo-Json -Compress

次の例は、サンプル スクリプトの出力です。

PS C:\Users\apervaiz\Documents> .\sample.ps1
{"ModelName":  "Dell","BiosVersion":  1.24,"TPMChipPresent":  true}

Linux 用のサンプル検出スクリプト

注:

Linux の検出スクリプトはユーザーのコンテキストで実行されるため、昇格が必要なシステム レベルの設定にチェックすることはできません。 この例は、 state/hash ファイルの です /etc/sudoers

Linux の検出スクリプトは、Bash などの POSIX 準拠のシェル スクリプトである必要があります。 ただし、スクリプトは、Python のように、スクリプト内からより複雑なインタープリターを呼び出すことができます。 他のインタープリターを正常に使用するには、検出スクリプトを受信する前に、デバイスに正しくインストールして構成する必要があります。

POSIX 準拠構文について: Linux 用のカスタム コンプライアンス スクリプト インタープリターは POSIX 準拠シェルのみをサポートするため、POSIX 構文を使用することが重要です。

準拠している構文と準拠していない構文の例を次に示します。

  • 準拠:

    functionName() {
      // scope of function with compliant syntax
      }
    

    たとえば、 [ "$a" = foo ] - 文字列比較に 1 つの等号を使用することは、POSIX に準拠しています。

  • 準拠していません:

    function functionName() {
      // scope of function with non POSIX compliant syntax
      }
    

    たとえば、 [ "$a" == foo ] - 文字列比較に二重等号を使用することは、POSIX に準拠していません。

詳細については、次のガイドが使用される場合があります。

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

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

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

  2. [ 基本]、名前を指定します

  3. [ 設定] で、スクリプトを [検出スクリプト] に追加します。 スクリプトを慎重に確認します。 Intuneでは、スクリプトで構文エラーやプログラムによるエラーが検証されません。

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

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

また、これらのスクリプトをMicrosoft Intune管理センターにアップロードするためのワークフローでは、現時点ではスコープ タグはサポートされていないことに注意してください。 カスタム コンプライアンス検出スクリプトを作成、編集、または表示するには、既定のスコープ タグを対象とする必要があります。

次の手順