Microsoft Intune 的自定义合规性发现脚本

在使用 Microsoft Intune 的 符合性自定义设置 之前,必须定义一个可以发现设备上可用的自定义符合性设置的脚本。 使用的脚本取决于平台:

  • Windows 设备使用 PowerShell 脚本。
  • Linux 设备可以运行任何语言的脚本,只要在设备上安装并配置了相应的解释器。

发现脚本将作为自定义合规性策略的一部分部署到设备。 在设备上运行符合性时,脚本会发现 JSON 文件定义的设置,这些设置也通过自定义合规性策略提供。

所有发现脚本:

  • 在创建符合性策略 之前 ,已添加到 Intune。 添加后,可以在使用自定义设置创建符合性策略时选择脚本。
    • 每个发现脚本只能与一个符合性策略一起使用,每个符合性策略只能包含一个发现脚本。
    • 在取消从策略中分配脚本之前,无法删除分配给符合性策略的发现脚本。
  • 在接收符合性策略的设备上运行。 该脚本评估在创建自定义合规性策略时上传的 JSON 文件的条件。
  • 标识 JSON 中定义的一个或多个设置,并返回这些设置的已发现值列表。 可以将单个脚本分配给每个策略,并支持发现多个设置。

此外,适用于 Windows 的 PowerShell 脚本:

  • 必须压缩才能在单行中输出结果。
  • 例如: $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 中的发现脚本在用户的上下文中运行,因此它们无法检查需要提升的系统级别设置。 文件的 就是state/hash/etc/sudoers一个示例。

适用于 Linux 的发现脚本可以调用满足要求的任何解释器。 在部署脚本之前,请确保在目标设备上正确安装和配置所选解释器。 若要指定脚本的解释器,请在脚本顶部包含一个 shebang 行,指示解释器二进制文件的路径。

例如,如果脚本应使用 Bash shell 作为解释器,请在脚本顶部添加以下行:

[ !/bin/bash ]

如果要将 Python 用于脚本,请指示解释器的安装位置。 例如,将以下内容添加到脚本顶部: [ !/usr/bin/python3 ][ !/usr/bin/env python ]

建议的最佳做法:若要使脚本能够处理中断或取消信号等场景,请实现正常终止机制。 当脚本正确缓存并处理这些信号时,该脚本可以执行清理任务并正常存在,从而确保正确释放资源。 例如,可以捕获特定信号,例如 SIGINT (中断信号) 或 SIGTERM (终止信号) ,并定义在收到这些信号时要运行的自定义操作。 这些操作可能包括关闭打开的文件、释放获取的锁或清理临时资源。 正确处理信号有助于保持脚本完整性并改善整体用户体验。

有关详细信息,请参阅 Intune Linux 自定义合规性示例 指南。

将发现脚本添加到 Intune

在生产环境中部署脚本之前,请在隔离的环境中对其进行测试,以确保使用的语法按预期方式运行。

  1. Microsoft Intune 管理中心登录,转到“终结点安全>设备符合性>脚本”>“添加> (选择平台)

  2. “基本信息”中,提供 “名称”。

  3. “设置”中,将脚本添加到 “检测脚本”。 请仔细查看脚本。 Intune 不会验证脚本的语法或编程错误。

  4. 对于仅限 Windows - 在“设置”中,为 PowerShell 脚本配置以下行为:

    • 使用登录凭据运行此脚本 - 默认情况下,脚本在设备上的系统上下文中运行。 将此值设置为“是”,使其在登录用户的上下文中运行。 如果用户未登录,则脚本默认返回系统上下文。
    • 强制脚本签名检查 – 有关详细信息,请参阅 PowerShell 文档中 的about_Signing
    • 在 64 位 PowerShell 主机中运行脚本 – 默认情况下,脚本使用 32 位 PowerShell 主机运行。 将此值设置为 “是 ”以强制使用 64 位主机运行脚本。
  5. 完成脚本创建过程。 该脚本现在显示在 Microsoft Intune 管理中心的“ 脚本 ”窗格中,可在配置符合性策略时选择该脚本。

由于将这些脚本上传到 Microsoft Intune 管理中心的工作流不支持范围标记,因此必须分配默认范围标记才能创建、编辑或查看自定义合规性发现脚本。

后续步骤