使用 Shell 腳本來擴充 Intune 中的裝置管理功能,超出 macOS 作業系統所支援的功能。
注意事項
需要 Rosetta 2 才能在 Apple Silicon Mac 上運行 x64 (Intel) 版本的應用程序。 若要在 Apple Silicon Mac 上自動安裝 Rosetta 2,您可以在 Intune 中部署殼層腳本。 若要檢視範例指令碼,請參閱 Rosetta 2 安裝指令碼。
必要條件
撰寫 Shell 指令碼並將其指派給 macOS 裝置時,請確定符合下列先決條件。
- 裝置執行的是 macOS 12.0 或更新版本。
- 裝置是由 Intune 管理。
- 設備直接連接到互聯網。 不支援透過 Proxy 連線。
- Shell 指令碼以 開
#!頭,且必須位於有效位置,例如#!/bin/sh或#!/usr/bin/env zsh。 - 已安裝適用 Shell 的指令行解譯器。
使用 Shell 指令碼之前的重要考量
- Shell 腳本需要在 macOS 裝置上成功安裝 Microsoft Intune 管理代理程式。 如需詳細資訊,請參閱適用於 macOS 的 Microsoft Intune 管理代理程式。
- Shell 指令碼會以個別進程的形式在裝置上平行執行。
- 以登入使用者身分執行的 Shell 腳本會在執行時針對裝置上所有目前登入的使用者帳戶執行。
- 使用者必須登入裝置,才能執行以登入使用者身分執行的指令碼。
- 如果指令碼需要進行標準使用者帳戶無法進行的變更,則需要 root 使用者權限。
- 在某些情況下,Shell 指令碼會嘗試比所選指令碼頻率更頻繁地執行,例如磁碟已滿、儲存位置遭到竄改、本機快取已刪除,或 Mac 裝置重新啟動。
- 執行時間超過 60 分鐘的 Shell 指令碼會停止,並報告為「失敗」。
建立並指派 Shell 指令碼原則
選取 [依平台依裝置>>]macOS>[管理裝置>] [指令碼]>[新增]。
在 [基本] 中,輸入下列屬性,然後選取 [下一步]:
- 名稱:輸入 Shell 指令碼的名稱。
- 描述:輸入 Shell 指令碼的描述。 這是選擇性設定,但建議進行。
在 [指令碼設定] 中,輸入下列屬性,然後選取 [ 下一步]:
- 上傳指令碼:瀏覽至 Shell 指令碼。 指令碼檔案的大小必須小於 1 MB。
- 以登入使用者身分執行腳本:選取 [ 是 ] 以在裝置上使用使用者的認證執行腳本。 選擇 No (預設) 以 root 使用者身分執行指令碼。
- 隱藏裝置上的指令碼通知: 依預設,會針對執行的每一個 Script 顯示 Script 通知。 終端使用者會看到 IT 人員正在 macOS 裝置上從 Intune 設定您的電腦通知。
- 腳本頻率: 選取指令碼的執行頻率。 選擇 [未設定] (預設) ,以僅執行指令碼一次。 具有頻率集的指令碼也會在裝置重新啟動後執行。
- 如果指令碼失敗,重試次數上限: 選取指令碼如果傳回非零結束碼 (表示成功) ,則應執行多少次。 選擇 [ 未設定] (預設) ,以在指令碼失敗時不重試。
在 [範圍標籤] 中,選擇性地新增指令碼的範圍標籤,然後選取 [下一步]。 您可以使用範圍標籤來判斷誰可以在 Intune 中看到腳本。 如需範圍標籤的完整詳細資訊,請參閱 針對 分散式 IT 使用角色型存取控制和範圍標籤。
選取 指派>選取要包含的群組。 會顯示 Microsoft Entra 群組的現有清單。 選取一或多個要接收指令碼的使用者或裝置群組。 選擇 Select (選取)。 您選擇的群組會顯示在清單中,並會收到您的指令碼原則。
注意事項
- 指派給使用者群組的 Shell 指令碼會套用至登入 Mac 的任何使用者。
- 更新殼層腳本的指派也會更新 適用於 macOS 的 Microsoft Intune MDM 代理程式的指派。
在 [ 檢閱 + 新增] 中,會顯示您設定之設定的摘要。 選取 [ 新增 ] 以儲存指令碼。 當您選取 [新增] 時,指令碼原則會部署至您選擇的群組。
您建立的指令碼現在會顯示在指令碼清單中。 如有需要,您可以在將 macOS 殼層腳本上傳至 Intune 之後檢視其內容。
監視 Shell 指令碼原則
您可以選擇下列其中一個報告,以監視使用者和裝置所有指派指令碼的執行狀態:
- 腳本>選取要監視>的指令碼裝置狀態
- 腳本>選取要監視>的指令碼使用者狀態
重要事項
無論選取的 指令碼頻率為何,只會在第一次執行指令碼時報告指令碼執行狀態。 指令碼執行狀態不會在後續執行時更新。 不過,更新的指令碼會被視為新指令碼,並會再次報告執行狀態。
指令碼執行後,會傳回下列其中一種狀態:
- 指令碼執行狀態為 失敗 表示指令碼傳回非零結束碼或指令碼格式不正確。
- 腳本執行狀態為 [成功] 表示腳本傳回零作為結束碼。
使用記錄收集對 macOS Shell 指令碼原則進行疑難排解
您可以收集裝置記錄,以協助疑難排解 macOS 裝置上的指令碼問題。
日誌收集的需求
在 macOS 裝置上收集記錄需要下列項目:
- 您必須指定完整的絕對日誌檔路徑。
- 檔案路徑必須僅使用分號 (;) 來分隔。
- 要上傳的日誌收集大小上限為 60 MB (壓縮) 或 25 個檔案,以先發生者為準。
- 允許記錄收集的檔案類型包括下列副檔名: .log、.zip、.gz、.tar、.txt、.xml、.crash .rtf
收集裝置記錄
導覽至裝置>管理裝置>指令碼和修復> 平台指令碼 ,然後選取 macOS 殼層指令碼。
在 [裝置狀態 ] 或 [使用者狀態 報告] 中,選取裝置。
選取 [收集記錄],提供記錄檔的資料夾路徑,僅以分號 (;) 分隔,路徑之間沒有空格或換行符。
例如,多個路徑應該寫成/Path/to/logfile1.zip;/Path/to/logfile2.log。重要事項
使用逗號、句點、換行符或引號分隔的多個日誌檔路徑(帶或不帶空格)將導致日誌收集錯誤。 也不允許使用空格作為路徑之間的分隔符。
選取 [確定]。 下次裝置上的 Intune 管理代理程式簽入 Intune 時,會收集記錄。 此簽到通常每 8 小時進行一次。
注意事項
- 收集的日誌在設備上加密,傳輸並在 Microsoft Azure 存儲中存儲 30 天。 儲存的記錄會視需要解密,並使用 Microsoft Intune 系統管理中心下載。
- 除了系統管理員指定的記錄之外,Intune 管理代理程式記錄也會從下列資料夾收集:
/Library/Logs/Microsoft/Intune和~/Library/Logs/Microsoft/Intune。 代理程式日誌檔名是IntuneMDMDaemon date--time.log和IntuneMDMAgent date--time.log。 - 如果任何管理員指定的檔案遺失或副檔名錯誤,您會在 中找到這些檔案名稱列在 中。
LogCollectionInfo.txt
記錄收集錯誤
由於下表中提供的任何原因,日誌收集可能無法成功。 若要解決這些錯誤,請遵循補救步驟。
| 十六進位) (錯誤代碼 | 錯誤碼 (dec) | 錯誤訊息 | 補救步驟 |
|---|---|---|---|
| 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裝置的自訂屬性
選取 [依平台>的裝置>]macOS>[組織裝置>] macOS> 的自訂屬性[新增]。
在 [基本] 中,輸入下列屬性,然後選取 [下一步]:
- 名稱:輸入指令碼的名稱。
- 描述:輸入指令碼的描述。 這是選擇性設定,但建議進行。
在 屬性設定 中,輸入下列屬性,然後選取 下一步:
- 屬性的資料類型:選取指令碼傳回之結果的資料類型。 可用的值為 String、 Integer 和 Date。
- 指令碼:選取指令碼檔案。
其他詳細信息:
- Shell 指令碼必須回應要報告的屬性,且輸出的資料類型必須符合自訂屬性設定檔中屬性的資料類型。
- Shell 指令碼傳回的結果必須為 20KB 或更少。
注意事項
使用
Date類型屬性時,請確定 shell 指令碼以 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若要以 UTC 時間列印符合 ISO-8601 標準的日期:
#!/bin/sh var=$(date -u +"%Y-%m-%dT%H:%M:%SZ") echo $var # Prints an ISO-8601 compliant date in UTC time在 「指派」中,按一下「 選取要包含的群組」。 當您選擇 [選取群組以包含 Microsoft Entra 群組的現有清單] 時,會顯示。 選取一或多個要接收指令碼的使用者或裝置群組。 選擇 Select (選取)。 您選擇的群組會顯示在清單中,並會收到您的指令碼原則。 或者,您可以選擇選取 [ 所有使用者]、[ 所有裝置] 或 [ 所有使用者和所有裝置 ],方法是在 [指派給] 旁邊的下拉式方塊中選取其中一個選項。
注意事項
- 指派給使用者群組的指令碼會套用至登入 Mac 的任何使用者。
在 [ 檢閱 + 新增] 中,會顯示您設定之設定的摘要。 選取 [ 新增 ] 以儲存指令碼。 當您選取 [新增] 時,指令碼原則會部署至您選擇的群組。
您建立的指令碼現在會顯示在自訂屬性清單中。 如有需要,您可以在將自訂屬性上傳至 Intune 之後檢視自訂屬性的內容。
監控自訂屬性原則
您可以選擇下列其中一個報告,以監控使用者和裝置所有已指派自訂屬性設定檔的執行狀態:
- 自訂屬性>選取要監視>的自訂屬性設定檔裝置狀態
- 自訂屬性>選取要監視>的自訂屬性設定檔使用者狀態
重要事項
自訂屬性設定檔中提供的 Shell 指令碼會在受管理的 Mac 上每 8 小時執行一次並報告。
自訂屬性設定檔執行後,會傳回下列其中一種狀態:
- 「 失敗」 狀態表示指令碼傳回非零結束碼,或指令碼格式不正確。 錯誤會在 結果 欄中報告。
- 由於 狀態為 [成功] 表示指令碼傳回零作為結束碼。 指令碼所回應的輸出會在 [結果] 資料行中報告。
常見問題集
為什麼指派的 shell 指令碼未在裝置上執行?
可能有以下幾個原因:
- 代理程式可能需要簽入才能接收新的或更新的指令碼。 此簽入程序每 8 小時進行一次,與 MDM 簽入不同。 請確定裝置已喚醒並連線到網路,以便代理程式成功簽入,並等待代理程式簽入。 您也可以要求終端使用者在 Mac 上開啟公司入口網站,選取裝置,然後按一下 [檢查設定]。
- 代理程式可能未安裝。 檢查代理程式是否已安裝
/Library/Intune/Microsoft Intune Agent.app在 macOS 裝置上。 - 代理程式可能不處於健康狀態。 代理程式將嘗試復原 24 小時,如果仍指派 Shell 指令碼,則會自行移除並重新安裝。
指令碼執行狀態的報告頻率為何?
腳本執行狀態會在腳本執行完成後立即回報給 Microsoft Intune 系統管理中心。 如果指令碼排定以設定的頻率定期執行,則它只會在第一次執行時報告狀態。
shell 腳本何時再次運行?
只有在設定 [指令碼失敗時重試次數上限 ] 設定,且指令碼在執行時失敗時,才會再次執行指令碼。 如果未設定 指令碼失敗時重試的最大次數, 且指令碼在執行時失敗,則不會再次執行指令碼,且執行狀態會報告為 失敗。
殼層腳本需要哪些 Intune 角色許可權?
您指派的 Intune 角色需要 裝置設定 許可權,才能刪除、指派、建立、更新或讀取殼層腳本。
已知問題
- 無指令碼執行狀態: 在不太可能的情況下,在裝置上收到腳本,且裝置在報告執行狀態之前離線,裝置將不會在系統管理中心報告腳本的執行狀態。
其他資訊
當您從 Microsoft Intune 部署 macOS 裝置的殼層腳本或自定義屬性時,它會部署在 Apple Silicon Mac 電腦上原生執行的 Intune 管理代理程式應用程式的新通用版本。 相同的部署將在 Intel Mac 機器上安裝 x64 版本的應用程式。 需要 Rosetta 2 才能在 Apple Silicon Mac 上運行 x64 (Intel) 版本的應用程序。 若要在 Apple Silicon Mac 上自動安裝 Rosetta 2,您可以在 Intune 中部署殼層腳本。 若要檢視範例指令碼,請參閱 Rosetta 2 安裝指令碼。