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管理センターにサインインし、[エンドポイント のセキュリティ>デバイスのコンプライアンス>Scripts>[追加] に移動します。 次に、プラットフォームを選択します。

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

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

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

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

次の手順