在 macOS 设备上的 Intune 中使用 Shell 脚本

使用 shell 脚本扩展 Intune 中的设备管理功能,使其超出 macOS 操作系统支持的功能。

注意

若要在 Apple Silicon Mac 上运行 x64 (Intel) 版本的应用,需要使用 Rosetta 2。 若要在 Apple Silicon Mac 上自动安装 Rosetta 2,可以在 Intune 中部署 shell 脚本。 若要查看示例脚本,请参阅 Rosetta 2 安装脚本

先决条件

在撰写 shell 脚本并将其分配给 macOS 设备时,请确保满足以下先决条件。

  • 设备运行的是 macOS 12.0 或更高版本。
  • 设备由 Intune 管理。
  • 设备直接连接到 Internet。 不支持通过代理连接。
  • Shell 脚本以有效位置开 #! 头,并且必须位于有效位置,例如 #!/bin/sh#!/usr/bin/env zsh
  • 安装了适用 shell 的命令行解释器。

使用 shell 脚本之前的重要注意事项

  • Shell 脚本要求在 macOS 设备上成功安装 Microsoft Intune 管理代理。 有关详细信息,请参阅 适用于 macOS 的 Microsoft Intune 管理代理
  • Shell 脚本作为单独的进程在设备上并行运行。
  • 以登录用户身份运行的 Shell 脚本将在运行时针对设备上所有当前登录的用户帐户运行。
  • 最终用户需要登录到设备才能执行以已登录用户身份运行的脚本。
  • 如果脚本需要进行标准用户帐户无法进行的更改,则需要 root 用户权限。
  • 在某些情况下,Shell 脚本将尝试比所选脚本频率更高的频率运行,例如磁盘已满、存储位置被篡改、本地缓存被删除或 Mac 设备重启时。
  • 运行时间超过 60 分钟的 Shell 脚本将停止并报告为“失败”。

创建并分配 shell 脚本策略

  1. 登录到 Microsoft Intune 管理中心

  2. 平台>选择设备>macOS>管理设备> 脚本添加>。

  3. 在“基本信息”中,输入以下属性并选择“下一步”:

    • 名称:输入 shell 脚本的名称。
    • 说明:输入 shell 脚本的说明。 此设置是可选的,但建议进行。
  4. 在“脚本设置”中,输入以下属性并选择“下一步”:

    • 上传脚本:浏览到 shell 脚本。 脚本文件的大小必须小于 1 MB。
    • 登录用户身份运行脚本:选择“”以在设备上使用用户的凭据运行脚本。 选择 “否 ” (默认) 以 root 用户身份运行脚本。
    • 隐藏设备上的脚本通知: 默认情况下,为运行的每个脚本显示脚本通知。 最终用户在 macOS 设备上看到 IT 正在配置来自 Intune 的计算机通知。
    • 脚本频率: 选择脚本的运行频率。 选择 “未配置” (默认) 以仅运行一次脚本。 具有频率集的脚本也将在设备重启后运行。
    • 脚本失败时可重试的最大次数: 选择如果脚本返回的非零退出代码 (意味着成功) 应运行的次数。 选择 “未配置” (默认) 以在脚本失败时不重试。
  5. “范围标记”中,选择为脚本添加范围标记,然后选择“ 下一步”。 可以使用范围标记来确定谁可以在 Intune 中查看脚本。 有关范围标记的完整详细信息,请参阅将基于 角色的访问控制和范围标记用于分布式 IT

  6. 选择“分配”> 选择要包含的组。 将显示 Microsoft Entra 组的现有列表。 选择要接收脚本的一个或多个用户或设备组。 选择“选择”。 您选择的组将显示在列表中,并将收到您的脚本策略。

    注意

  7. 在“查看 + 添加”中,将显示你配置的设置的摘要。 选择“添加”以保存脚本。 选择 “添加”时,脚本策略将部署到所选组。

你创建的脚本现在显示在脚本列表中。 如果需要,可以在将 macOS shell 脚本上传到 Intune 后查看其内容。

监视 shell 脚本策略

可以通过选择以下报告之一来监视用户和设备的所有已分配脚本的运行状态:

  • 脚本>选择要监视>的脚本设备状态
  • 脚本>选择要监视>的脚本用户状态

重要

无论选择的 脚本频率如何,仅当状态与上次报告相比发生更改时,才会报告脚本运行状态。 例如,如果脚本在一次运行中报告成功,在下一次运行中报告失败,则 Intune 会使用当前运行信息更新状态和上次更新的时间戳。 如果脚本状态未在同步之间更改,则 Intune 从初始运行起每 7 天更新一次更新的时间戳。

脚本运行后,将返回以下状态之一:

  • 脚本运行状态为 “失败 ”表示脚本返回了非零退出代码或脚本格式不正确。
  • 脚本运行状态 为“成功 ”表示脚本返回零作为退出代码。

使用日志收集对 macOS shell 脚本策略进行故障排除

可以收集设备日志以帮助解决 macOS 设备上的脚本问题。

日志收集的要求

在 macOS 设备上收集日志需要以下项:

  • 必须指定完整的绝对日志文件路径。
  • 必须仅使用分号 (;) 来分隔文件路径。
  • 要上传的最大日志集合大小为 60 MB (压缩) 或 25 个文件,以先发生的为准。
  • 允许用于日志收集的文件类型包括以下扩展名: .log、.zip、.gz、.tar、.txt、.xml、.crash .rtf

收集设备日志

  1. 登录到 Microsoft Intune 管理中心

  2. 导航到“设备>”、“管理设备>”、“脚本和修正>”、“平台”脚本,然后选择 macOS shell 脚本。

  3. 设备状态用户状态 报告中,选择设备。

  4. 选择 “收集日志”,提供日志文件的文件夹路径,仅用分号 (;) 分隔,路径之间没有空格或换行符。
    例如,多个路径应写成 /Path/to/logfile1.zip;/Path/to/logfile2.log.

    重要

    使用逗号、句点、换行符或引号(带或不带空格)分隔多个日志文件路径将导致日志收集错误。 此外,也不允许在路径之间使用空格作为分隔符。

  5. 选择“确定”。 设备上的 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.

日志收集错误

日志收集可能由于下表中提供的任何原因而失败。 要解决这些错误,请按照修正步骤操作。

十六进制) (错误代码 错误代码 (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 的自定义属性

您可以创建自定义属性配置文件,以便使用 shell 脚本从托管 macOS 设备收集自定义属性。

为 macOS 设备创建和分配自定义属性

  1. 登录到 Microsoft Intune 管理中心

  2. 按平台>选择设备>macOS>组织设备>macOS> 的自定义属性添加

  3. 在“基本信息”中,输入以下属性并选择“下一步”:

    • 名称:输入脚本的名称。
    • 说明:输入脚本说明。 此设置是可选的,但建议进行。
  4. “属性设置”中,输入以下属性,然后选择“ 下一步”:

    • 属性的数据类型:选择脚本返回的结果的数据类型。 可用值为 字符串整数日期
    • 脚本:选择脚本文件。

    其他详细信息:

    • 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
    
  5. “作业”中,单击 选择要包含的组。 选择选择组以包含Microsoft Entra组的现有列表时,将显示。 选择要接收脚本的一个或多个用户或设备组。 选择“选择”。 您选择的组将显示在列表中,并将收到您的脚本策略。 或者,可以通过在“分配给”旁边的下拉框中选择以下选项之一来选择“所有用户”、“所有设备”或“所有用户和所有设备”。

    注意

    • 分配给用户组的脚本适用于登录 Mac 的任何用户。
  6. 在“查看 + 添加”中,将显示你配置的设置的摘要。 选择“添加”以保存脚本。 选择 “添加”时,脚本策略将部署到所选组。

您创建的脚本现在显示在自定义属性列表中。 如果需要,可以在将自定义属性上传到 Intune 后查看其内容。

监视自定义属性策略

您可以通过选择以下报告之一来监控用户和设备的所有已分配自定义属性配置文件的运行状态:

  • 自定义属性>选择要监视>的自定义属性配置文件设备状态
  • 自定义属性>选择要监视>的自定义属性配置文件用户状态

重要

自定义属性配置文件中提供的 Shell 脚本在托管的 Mac 上每 8 小时运行一次并报告。

自定义属性配置文件运行后,将返回以下状态之一:

  • 状态为 “失败 ”表示脚本返回了非零退出代码或脚本格式不正确。 在 “结果” 列中报告错误。
  • 由于 状态为成功 ,指示脚本返回零作为退出代码。 在 “结果” 列中报告脚本回显的输出。

常见问题解答

为什么分配的 shell 脚本没有在设备上运行?

可能有以下几个原因:

  • 代理可能需要检查才能接收新的或更新的脚本。 此检查过程每 8 小时执行一次,与 MDM 检查不同。 确保设备处于唤醒状态并连接到网络,以便成功进行代理检查,并等待代理检查。 还可以请求最终用户在 Mac 上打开公司门户,选择设备,然后单击“检查设置”。
  • 可能未安装代理。 检查代理是否已安装在 /Library/Intune/Microsoft Intune Agent.app macOS 设备上。
  • 代理可能未处于正常状态。 代理将尝试恢复 24 小时,如果仍分配了 shell 脚本,则会删除自身并重新安装。

报告脚本运行状态的频率如何?

脚本运行完成后,脚本运行状态将立即报告给 Microsoft Intune 管理中心。 如果脚本被安排以设定的频率定期运行,则它仅在首次运行时报告状态。

何时再次运行 shell 脚本?

仅当配置了 “脚本失败时可重试的最大次数 ”设置,并且脚本在运行时失败时,脚本才会再次运行。 如果未配置 脚本失败时可重试的最大次数 ,并且脚本在运行时失败,则不会再次运行该脚本,并且运行状态将报告为 失败

shell 脚本需要哪些 Intune 角色权限?

你分配的 Intune 角色需要 设备配置 权限才能删除、分配、创建、更新或读取 shell 脚本。

已知问题

  • 无脚本运行状态: 万一在设备上收到脚本并且设备在报告运行状态之前脱机,设备将不会在管理中心报告脚本的运行状态。

其他信息

从 Microsoft Intune 为 macOS 设备部署 shell 脚本或自定义属性时,它将部署在 Apple Silicon Mac 计算机上本地运行的 Intune 管理代理应用的新通用版本。 相同的部署将在 Intel Mac 计算机上安装 x64 版本的应用。 若要在 Apple Silicon Mac 上运行 x64 (Intel) 版本的应用,需要使用 Rosetta 2。 若要在 Apple Silicon Mac 上自动安装 Rosetta 2,可以在 Intune 中部署 shell 脚本。 若要查看示例脚本,请参阅 Rosetta 2 安装脚本

后续步骤