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

上記のサンプル スクリプトの出力例を次に示します。

{"BiosVersion":"1.24","Manufacturer":"Microsoft Corporation","TPMChipPresent":true}

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

注:

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

Linux 用の検出スクリプトは、要件を満たす任意のインターペーターを呼び出すことができます。 スクリプトをデプロイする前に、選択したインタープリターがターゲット デバイスに適切にインストールされ、構成されていることを確認します。 スクリプトの intepreter を指定するには、スクリプトの先頭にインタープリター バイナリへのパスを示す shebang 行を含めます。

たとえば、スクリプトで Bash シェルをインタープリターとして使用する必要がある場合は、スクリプトの上部に次の行を追加します。

[ !/bin/bash ]

スクリプトに Python を使用する場合は、インタープリターがインストールされている場所を指定します。 たとえば、スクリプトの先頭に次を追加します。 [ !/usr/bin/python3 ][ !/usr/bin/env python ]

推奨されるベスト プラクティス: スクリプトに正常な終了メカニズムを実装すると、中断やキャンセルシグナルなどのシナリオを処理できます。 これらのシグナルを適切にキャッシュして処理することで、スクリプトはクリーンアップ タスクを実行し、正常に存在し、リソースが正しく解放されるようにすることができます。 たとえば、SIGINT (割り込みシグナル) や SIGTERM (終了信号) などの特定のシグナルをキャッチし、これらのシグナルを受信したときに実行されるカスタム アクションを定義できます。 これらのアクションには、開いているファイルを閉じる、取得したロックを解放する、一時的なリソースをクリーンアップするなどがあります。 シグナルを適切に処理すると、スクリプトの整合性を維持し、全体的なユーザー エクスペリエンスを向上させることができます。

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

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

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

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

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

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

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

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

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

次の手順