Intune の macOS デバイスでシェル スクリプトを使用する

シェル スクリプトを使用して、macOS オペレーティング システムでサポートされている機能を超えて Intune のデバイス管理機能を拡張します。

注:

Apple シリコンを搭載した Mac で x64 (Intel) バージョンのアプリを実行するには、Rosetta 2 が必要です。 Apple Silicon Mac に Rosetta 2 を自動的にインストールするには、Intune にシェル スクリプトを展開します。 サンプル スクリプトを表示するには、「 Rosetta 2 インストール スクリプト」を参照してください。

前提条件

シェル スクリプトを作成して macOS デバイスに割り当てるときは、次の前提条件が満たされていることを確認します。

  • デバイスが macOS 12.0 以降を実行している。
  • デバイスは Intune によって管理されます。
  • デバイスはインターネットに直接接続されます。 プロキシ経由の接続はサポートされていません。
  • シェル スクリプトは #! で始まり、 #!/bin/sh#!/usr/bin/env zsh などの有効な場所に存在する必要があります。
  • 該当するシェルのコマンドライン インタープリタがインストールされます。

シェル スクリプトを使用する前の重要な考慮事項

  • シェル スクリプトを使用するには、macOS デバイスに Microsoft Intune 管理エージェントが正常にインストールされている必要があります。 詳細については、「macOS 用の Microsoft Intune 管理エージェント」を参照してください。
  • シェル スクリプトは、デバイス上で個別のプロセスとして並列で実行されます。
  • サインインしているユーザーとして実行されているシェル スクリプトは、実行時にデバイス上で現在サインインしているすべてのユーザー アカウントに対して実行されます。
  • エンド ユーザーは、サインインしたユーザーとして実行されているスクリプトを実行するためにデバイスにサインインする必要があります。
  • スクリプトで標準ユーザー アカウントではできない変更を加える必要がある場合は、ルート ユーザー権限が必要です。
  • シェル スクリプトは、ディスクがいっぱいの場合、保存場所が改ざんされている場合、ローカル キャッシュが削除されている場合、Mac デバイスが再起動した場合など、特定の条件下で、選択したスクリプトの頻度よりも高い頻度で実行しようとします。
  • 60 分以上実行されているシェル スクリプトは停止され、"失敗" として報告されます。

シェル スクリプト ポリシーを作成して割り当てる

  1. Microsoft Intune 管理センターにサインインします。

  2. [デバイス]>プラットフォーム別>macOS>デバイスの管理>スクリプト>追加] を選択します。

  3. [基本] で、次のプロパティを入力し、[次へ] を選択します。

    • 名前: シェル スクリプトの名前を入力します。
    • 説明: シェル スクリプトの説明を入力します。 この設定は省略可能ですが、推奨されます。
  4. [スクリプト設定] で、次のプロパティを入力し、[次へ] を選択します。

    • スクリプトのアップロード: シェル スクリプトを参照します。 スクリプト ファイルのサイズは 1 MB 未満にする必要があります。
    • サインインしたユーザーとしてスクリプトを実行する: デバイス上のユーザーの資格情報を使用してスクリプトを実行するには、[ はい ] を選択します。 [ いいえ ] (既定) を選択して、ルート ユーザーとしてスクリプトを実行します。
    • デバイスでスクリプト通知を非表示 にする:既定では、実行されているスクリプトごとにスクリプトの通知が表示されます。 エンド ユーザーには、macOS デバイスで Intune からの IT 管理者によるコンピューター通知が構成されていることが表示されます。
    • スクリプトの頻度: スクリプトを実行する頻度を選択します。 スクリプトを 1 回だけ実行するには、[ 未構成 (既定)] を選択します。 頻度が設定されたスクリプトは、デバイスの再起動後にも実行されます。
    • スクリプトが失敗した場合の再試行の最大回数: 0 以外の終了コード (0 は成功を意味します) が返された場合にスクリプトを実行する回数を選択します。 スクリプトが失敗した場合に再試行しない場合は、[ 未構成 (既定)] を選択します。
  5. [ スコープ タグ] で、必要に応じてスクリプトのスコープ タグを追加し、[ 次へ] を選択します。 スコープ タグを使用して、Intune でスクリプトを表示できるユーザーを決定できます。 スコープ タグの詳細については、「 分散型 IT に役割ベースのアクセス制御とスコープ タグを使用する」を参照してください。

  6. [割り当て]>[含めるグループを選択] の順に選択します。 Microsoft Entra グループの既存の一覧が表示されます。 スクリプトを受け取る 1 つ以上のユーザーまたはデバイス グループを選択します。 [選択] を選択します。 選択したグループがリストに表示され、スクリプト ポリシーを受け取ります。

    注:

    • ユーザグループに割り当てられたシェルスクリプトは、Macにログインするすべてのユーザに適用されます。
    • シェル スクリプトの割り当てを更新すると、macOS 用 Microsoft Intune MDM エージェントの割り当ても更新されます。
  7. [確認 + 追加] で、構成した設定の概要が表示されます。 [追加] を選択してスクリプトを保存します。 [ 追加] を選択すると、選択したグループにスクリプト ポリシーが展開されます。

作成したスクリプトがスクリプトの一覧に表示されます。 必要に応じて、macOS シェル スクリプトを Intune にアップロードした後に、その内容を表示できます。

シェル スクリプト ポリシーの監視

次のいずれかのレポートを選択して、ユーザーとデバイスに割り当てられているすべてのスクリプトの実行状態を監視できます。

  • スクリプト>監視するスクリプトを選択します>デバイスの状態
  • スクリプト>監視するスクリプトを選択します>ユーザーの状態

重要

選択した スクリプトの頻度に関係なく、スクリプトの実行ステータスは、前回のレポートからステータスが変更された場合にのみ報告されます。 たとえば、スクリプトが 1 つの実行で成功を報告し、次の実行で失敗を報告した場合、Intune は状態と最後に更新されたタイムスタンプの両方を現在の実行情報で更新します。 スクリプトの状態が同期間で変更されない場合、Intune は最初の実行から 7 日ごとに最後に更新されたタイムスタンプを更新します。

スクリプトが実行されると、次のいずれかのステータスが返されます。

  • スクリプト実行の状態が [失敗] の場合は、スクリプトが 0 以外の終了コードを返したか、スクリプトの形式が正しくないことを示します。
  • スクリプトの実行状態が [成功 ] であれば、スクリプトが終了コードとして 0 を返したことを示します。

ログ収集を使用した macOS シェル スクリプト ポリシーのトラブルシューティング

デバイス ログを収集すると、macOS デバイスでのスクリプトの問題のトラブルシューティングに役立てることができます。

ログ収集の要件

macOS デバイスでログを収集するには、次の項目が必要です。

  • 絶対ログ ファイルの完全なパスを指定する必要があります。
  • ファイル パスは、セミコロン (;) のみを使用して区切る必要があります。
  • アップロードするログ コレクションの最大サイズは、60 MB (圧縮) または 25 ファイルのいずれか早い方です。
  • ログ収集で許可されるファイルの種類には、.log、.zip、.gz、.tar、.txt、.xml、.crash、.rtf があります。

デバイス ログを収集する

  1. Microsoft Intune 管理センターにサインインします。

  2. [デバイス>デバイスの管理]>[スクリプトと修復]>プラットフォーム スクリプト] に移動し、macOS シェル スクリプトを選択します。

  3. [デバイスの状態] または [ユーザー状態レポート] で、デバイスを選択します。

  4. [ ログの収集] を選択し、ログ ファイルのフォルダー パスをセミコロン (;) で区切って指定し、パスの間にスペースや改行を入れずに指定します。
    たとえば、複数のパスを /Path/to/logfile1.zip;/Path/to/logfile2.log として記述する必要があります。

    重要

    複数のログ ファイル パスがコンマ、ピリオド、改行、引用符で区切られると、スペースの有無にかかわらず、ログ収集エラーが発生します。 また、スペースはパス間の区切り記号として使用できません。

  5. [OK] を選択します。 ログは、デバイス上の Intune 管理エージェントが次回 Intune にチェックインするときに収集されます。 このチェックは通常 8 時間ごとに行われます。

    注:

    • 収集されたログはデバイス上で暗号化され、送信され、Microsoft Azure ストレージに 30 日間保存されます。 保存されたログはオンデマンドで復号化され、Microsoft Intune 管理センターを使用してダウンロードされます。
    • 管理者が指定したログに加えて、Intune管理エージェントのログは、/Library/Logs/Microsoft/Intune~/Library/Logs/Microsoft/Intune のフォルダーからも収集されます。 エージェント ログ ファイル名は IntuneMDMDaemon date--time.logIntuneMDMAgent date--time.log です。
    • 管理者が指定したファイルが見つからない場合、または間違ったファイル拡張子を持つ場合は、 LogCollectionInfo.txtにこれらのファイル名が一覧表示されます。

ログ収集エラー

ログ収集が正常に行われないのは、以下の表に示す以下のいずれかの理由によるものです。 これらのエラーを解決するには、修復手順を実行します。

エラー コード (16 進) エラー コード (12 進) エラー メッセージ 修復手順
0X87D300D1 2016214834 ログ ファイルのサイズは 60 MB を超えないようにしてください。 圧縮ログのサイズは 60 MB 未満であることを確認します。
0X87D300D1 2016214831 指定されたログ ファイルのパスが存在する必要があります。 システムのユーザー フォルダーは、ログ ファイルにとって無効な場所です。 指定されたファイル パスが有効でアクセス可能であることを確認します。
0X87D300D2 2016214830 アップロード URL の有効期限が切れているため、ログ収集ファイルのアップロードに失敗しました。 ログの収集アクションを再試行します
0X87D300D3、0X87D300D5、0X87D300D7 2016214829, 2016214827, 2016214825 暗号化が失敗したため、ログ収集ファイルのアップロードに失敗しました。 ログのアップロードを再試行します。 ログの収集アクションを再試行します
2016214828 ログ ファイルの数が、許可されている上限である 25 ファイルを超えました。 一度に収集できるログ ファイルは最大 25 個までです。
0X87D300D6 2016214826 zip エラーのため、ログ収集ファイルのアップロードに失敗しました。 ログのアップロードを再試行します。 ログの収集アクションを再試行します
2016214740 圧縮されたログが見つからなかったため、ログを暗号化できませんでした。 ログの収集アクションを再試行します
2016214739 ログは収集されましたが、格納できませんでした。 ログの収集アクションを再試行します

macOS のカスタム属性

シェルスクリプトを使用して管理対象の macOS デバイスからカスタム プロパティを収集できるカスタム属性プロファイルを作成できます。

macOS デバイスのカスタム属性を作成して割り当てる

  1. Microsoft Intune 管理センターにサインインします。

  2. [デバイス>プラットフォーム別]>macOS>[デバイスの整理]>macOS>Add のカスタム属性の順に選択します。

  3. [基本] で、次のプロパティを入力し、[次へ] を選択します。

    • 名前: スクリプトの名前を入力します。
    • 説明: スクリプトの説明を入力します。 この設定は省略可能ですが、推奨されます。
  4. [ 属性の設定] で、次のプロパティを入力し、[ 次へ] を選択します。

    • 属性のデータ型: スクリプトが返す結果のデータ型を選択します。 指定可能な値は、 文字列整数Date です。
    • スクリプト: スクリプト ファイルを選択します。

    その他の詳細:

    • シェル スクリプトは、レポートする属性をエコーする必要があり、出力のデータ型は、カスタム属性プロファイルの属性のデータ型と一致する必要があります。
    • シェル スクリプトによって返される結果は 20 KB 以下である必要があります。

    注:

    Date型属性を使用する場合は、シェル スクリプトが ISO-8601 形式で日付を返すことを確認してください。 以下の例を参照してください。

    ISO-8601 準拠の日付をタイム ゾーンで印刷するには:

    #!/bin/sh
    var=$(date +"%Y-%m-%dT%H:%M:%S%z")
    echo $var # Prints an ISO-8601 compliant date with time-zone
    

    ISO-8601 準拠の日付を UTC 時刻で印刷するには:

    #!/bin/sh
    var=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
    echo $var # Prints an ISO-8601 compliant date in UTC time
    
  5. [ 課題] で、[ 含めるグループを選択] をクリックします。 [グループの選択] を選択して Microsoft Entra グループの既存の一覧を含めると、表示されます。 スクリプトを受け取る 1 つ以上のユーザーまたはデバイス グループを選択します。 [選択] を選択します。 選択したグループがリストに表示され、スクリプト ポリシーを受け取ります。 または、[割り当て先] の横にあるドロップダウン ボックスでこれらのオプションのいずれかを選択して、[すべてのユーザー]、[すべてのデバイス]、または [すべてのユーザーとすべてのデバイス] を選択することもできます。

    注:

    • ユーザグループに割り当てられたスクリプトは、Mac にログインするすべてのユーザに適用されます。
  6. [確認 + 追加] で、構成した設定の概要が表示されます。 [追加] を選択してスクリプトを保存します。 [ 追加] を選択すると、選択したグループにスクリプト ポリシーが展開されます。

作成したスクリプトがカスタム属性のリストに表示されます。 必要に応じて、カスタム属性を Intune にアップロードした後で、その内容を表示できます。

カスタム属性ポリシーを監視する

次のいずれかのレポートを選択して、ユーザーとデバイスに割り当てられたすべてのカスタム属性プロファイルの実行状態を監視できます。

  • カスタム属性>監視するカスタム属性プロファイルを選択します>デバイスの状態
  • カスタム属性>監視するカスタム属性プロファイルを選択します>ユーザーの状態

重要

カスタム属性プロファイルで提供されるシェル スクリプトは、管理対象の Mac で 8 時間ごとに実行され、報告されます。

カスタム属性プロファイルが実行されると、次のいずれかのステータスが返されます。

  • [ 失敗 ] 状態は、スクリプトが 0 以外の終了コードを返したか、スクリプトの形式が正しくないことを示します。 エラーは [結果] 列に報告されます。
  • [成功] の状態は、スクリプトが終了コードとして 0 を返したことを示します。 スクリプトによってエコーされた出力は、[ 結果] 列に報告されます。

よく寄せられる質問

割り当てられたシェル スクリプトがデバイスで実行されないのはなぜですか?

いくつかの理由が考えられます。

  • エージェントは、新規または更新されたスクリプトを受け取るためにチェックする必要がある場合があります。 このチェック イン プロセスは 8 時間ごとに行われ、MDM チェックとは異なります。 エージェントのチェックが成功するために、デバイスが起動していてネットワークに接続されていることを確認し、エージェントがチェックするのを待ちます。 Mac でポータル サイトを開き、デバイスを選択して [設定の確認] をクリックするようにエンド ユーザーに依頼することもできます。
  • エージェントがインストールされていない可能性があります。 エージェントが macOS デバイスに /Library/Intune/Microsoft Intune Agent.app でインストールされていることを確認します。
  • エージェントが正常な状態でない可能性があります。 エージェントは 24 時間回復を試み、シェル スクリプトがまだ割り当てられている場合は自動的に削除して再インストールします。

スクリプト実行状態はどのくらいの頻度で報告されますか?

スクリプトの実行状態は、スクリプトの実行が完了するとすぐに Microsoft Intune 管理センターに報告されます。 スクリプトが設定された頻度で定期的に実行されるようにスケジュールされている場合、スクリプトは最初に実行されたときのステータスのみを報告します。

シェルスクリプトはいつ再び実行されますか?

スクリプトは、[ スクリプトが失敗した場合に再試行する最大回数 ] 設定が構成されていて、実行時にスクリプトが失敗した場合にのみ再実行されます。 [スクリプトが失敗した場合に再試行する最大回数] が設定されておらず、スクリプトの実行時にスクリプトが失敗した場合、スクリプトは再実行されず、実行の状態は失敗として報告されます。

シェル スクリプトにはどのような Intune ロールのアクセス許可が必要ですか?

割り当てられた Intune ロールには、シェル スクリプトを削除、割り当て、作成、更新、または読み取りするための デバイス構成 アクセス許可が必要です。

既知の問題

  • スクリプト実行状態がありません: 万が一デバイスでスクリプトを受信し、実行状態が報告される前にデバイスがオフラインになった場合、デバイスは管理センターでスクリプトの実行状態を報告しません。

追加情報

macOS デバイスのシェル スクリプトまたはカスタム属性を Microsoft Intune から展開すると、Apple Silicon Mac マシンでネイティブに実行される新しいユニバーサル バージョンの Intune 管理エージェント アプリが展開されます。 同じ展開で、Intel Mac コンピューターには x64 バージョンのアプリがインストールされます。 Apple シリコンを搭載した Mac で x64 (Intel) バージョンのアプリを実行するには、Rosetta 2 が必要です。 Apple Silicon Mac に Rosetta 2 を自動的にインストールするには、Intune にシェル スクリプトを展開します。 サンプル スクリプトを表示するには、「 Rosetta 2 インストール スクリプト」を参照してください。

次の手順