AI Governance:使用 Jamf Extender 扩展覆盖范围
什么是 AI Governance?
AI Governance 弥合了"我们允许了 AI"与"我们能够证明它在整个设备群中都得到了正确配置"之间的差距。 通过 Jamf for Mac 提供,它为 IT 和安全团队带来两项集成能力:AI Visibility 提供近乎实时的清单,展示正在运行哪些 AI 工具、它们在做什么以及正在连接什么。AI Policies 将 每个 AI 工具的企业级控制转化为通俗易懂的选项,并以操作系统强制的受管理设置形式交付。 两者共同回答了审计人员和管理层会问的三个问题:正在运行什么、配置是否正确,以及你能否加以证明。
Jamf Extender 增加了什么
Windows 策略导出: 将 AI 治理策略下载为可直接部署的软件包,以便上传到任何 MDM 或 UEM 解决方案,从而轻松在 Windows 终端上与你的 macOS 和移动设备群一同强制实施 AI 工具配置。
实时阻止状态可见性: 在部署前一目了然地了解哪些 AI 工具已被阻止。绿色状态指示器显示当前覆盖情况,帮助你避免不必要的工作并即时了解你的强制实施态势。
精简的部署工作流: 直接从 AI Visibility 面板将 Custom Prevent Lists(终端控制)和域名阻止(网络控制)部署到 Jamf 的安全工具中,无需在各门户之间切换或手动创建列表。
自动重复检测: 该扩展会智能地跳过已被阻止的 signing ID 和域名,为你提供清晰的部署摘要并避免不必要的重复条目。
跨门户编排: Jamf Extender 会根据你的 Jamf Extender Portal Group 配置,自动将部署路由到正确的 Jamf Cloud 门户,从而消除手动查找和配置错误。
目录
谁最受益:
管理多个环境(生产、预发布、开发)的组织,或那些频繁调整 AI 治理策略的组织,会欣赏这种可见性和部署速度。希望实时确认其在 Jamf 安全工具间强制实施态势的团队,会发现集成的状态指示器尤其有价值。
概述
本指南将向你展示如何在 Jamf Account 中跨 AI Governance 使用 Jamf Extender。Jamf Extender 为 AI Visibility 面板增添了功能,用于查看 AI 工具使用情况,并为你环境中已识别的 AI 工具部署额外的终端和网络阻止。Jamf Extender 还在 AI Policies 构建器中直接添加了下载选项,让你可以将任何策略导出为可直接部署的软件包,用于 Windows 终端,方式为上传到你所选择的 MDM 或 UEM。
你将完成的内容:
- 在 Jamf Account AI Visibility 中查看 AI 工具使用情况
- 部署 Custom Prevent Lists(Jamf Protect)和 Custom Domain Blocks(Security Cloud)
- 验证并管理 AI 治理阻止
- (可选)将 AI Governance 策略配置部署到 Windows 终端
所需时间: 每次部署 2-5 分钟
前提条件
✅ 已安装并配置 Jamf Extender(参见下方 Jamf Extender 设置)
✅ 已配置 Portal Groups,将 Jamf Pro 关联到 Protect 和/或 Security Cloud
✅ 具有以下管理员访问权限:
- Jamf Account AI Governance
- Jamf Protect 实例(具有 Custom Prevent Lists 的写入权限)
- Jamf Security Cloud 实例(可选,用于域名阻止)
Jamf Extender 设置
概述
本指南将引导你在安装后设置 Jamf Extender,包括配置 API 凭据以及使用 Portal Groups 将你的 Jamf 系统关联在一起。
你将完成的内容:
- 为 Jamf Pro、Jamf Protect 和 Jamf Security Cloud 配置 API 凭据
- 使用 Portal Groups 将这些系统关联在一起
- 启用跨平台设备查找和部署
所需时间: 初始设置 5-10 分钟
设置前提条件
✅ 已在浏览器(Chrome、Safari、Edge 或 Firefox)中安装 Jamf Extender
✅ 具有以下管理员访问权限:
- Jamf Pro 实例
- Jamf Protect 实例
- Jamf Security Cloud 实例
✅ 所需权限:
- Jamf Pro: 创建 API 角色和客户端的能力
- Jamf Protect: Admin 角色(非只读)以创建 Custom Prevent Lists。该角色可以限定为仅写入 Prevent Lists。
- Jamf Security Cloud: Admin 凭据
第 A 部分:初始扩展设置
安装 Jamf Extender 后,你会看到:
- 浏览器工具栏: Jamf Extender 图标(点击以打开弹出窗口)
- Jamf Pro 页面: 在 Jamf logo 旁出现状态标记
- Jamf Pro 侧边栏: "Resource Center" 上方的 "Jamf Extender" 按钮
初始状态: 在你设置凭据之前,状态标记会显示为黄色的 "Configure Extension"。
第 B 部分:配置 Jamf Pro 凭据
你有两个选项:Quick Setup(推荐) 或 Manual Setup。
Automatic Setup(推荐)
Automatic Setup 会创建具有正确权限的 API 角色和客户端。
- 导航到你的 Jamf Pro 实例并登录
- 在 Settings 下方的左侧菜单中点击 Jamf Extender
- 在 Configuration 部分中点击 "Set Up Automatically"
- 等待确认(通常 5-10 秒)
- 刷新网页
- 完成! 状态标记变为绿色的 "Extension Active"
Automatic Setup 的作用:
- 创建名为 "Jamf Extender" 的 API 角色
- 授予所有必需的读取权限(computers、policies、profiles、groups 等)
- 授予 Categories 和 Packages 的写入权限(删除未使用的)
- 创建分配到该角色的 API 客户端
- 安全地存储凭据(在安装了 Jamf Extender 应用的 Mac 上使用 macOS Keychain,其他情况下使用浏览器存储)
Quick Setup 故障排除:
- ❌ "Failed to create API client" → 检查你的 Jamf Pro 用户是否具有创建 API 角色/客户端的权限
- ❌ "Network error" → 确认你已登录 Jamf Pro 且页面已完全加载
第 C 部分:配置 Jamf Protect 凭据
⚠️ 关键: 你需要一个具备写入能力的 Protect API 客户端(非只读)才能部署 Custom Prevent Lists。
Set Up Automatically(推荐)
- 导航到你的 Jamf Protect 实例(例如
tenant.protect.jamfcloud.com)并登录 - 点击浏览器工具栏中的 Jamf Extender 图标
- Jamf Protect 部分出现,在 Configuration 下显示检测到的实例
- (可选)如需要可更改 Client Name
- 点击 "Set Up Automatically"
- 复制并保存 Client ID 和 Password(仅显示一次)到密码管理器
⚠️ 重要: 自动创建的客户端默认具有只读权限。对于 AI Visibility 部署,你需要写入访问权限。
在你创建上述初始 API 客户端后:
选项 A:授予完整 Admin
- 导航到 Administrative → API Clients 并选择新创建的 API 客户端
- 点击 Edit,并使用 Roles 下拉菜单添加 Full Admin 角色
- (可选)点击标签中的 X 以移除 Read Only 角色
选项 B:添加适当的写入权限
- 导航到 Administrative → Account → Roles 并选择 +Create Role
- 为新的 API 客户端命名(示例:Prevent List Creation)
- 取消勾选 Write 列顶部的复选框以取消选择所有权限
- 勾选 Write 列下的 Prevent Lists 复选框
- 导航到 Administrative → API Clients 并选择新创建的 API 客户端
- 点击 Edit,并使用 Roles 下拉菜单添加你创建的新限定角色
- (可选)点击标签中的 X 以移除 Read Only 角色
此操作的作用:
- 通过 Protect 的 GraphQL API 创建 API 客户端
- 使用从你的浏览器会话中捕获的 Auth0 JWT
- 按来源存储凭据(例如
protect_creds:https://overview.protect.jamfcloud.com)
第 D 部分:配置 Jamf Security Cloud 凭据
Manual Setup
在 Security Cloud 中:
- 从域名中复制你的 customerId 值——示例:https://radar.wandera.com/dashboard?customerId=1a2s3d4f5g6h7j8k9l0
- 在左侧菜单中导航到 Integrations → Risk API
- 点击 Generate API key
- 为该 API Key 命名
- 复制并保存 Application ID 和 Secret(仅显示一次)到密码管理器
在 Jamf Extender 中
- 点击 Jamf Extender 工具栏图标
- 在 Configuration 部分中,展开 Manual 部分
- 在 Portals 下的第一个下拉菜单中选择 Add new...
- 在 Type 下选择 Security Cloud
- 将你的 customerId 粘贴到 Customer ID 字段
- 将你的 Application ID 粘贴到 Client ID 字段
- 将你的 Application Secret 粘贴到 Client Secret 字段
- 输入你用于登录 Security Cloud 的 Admin Email and Password
第 E 部分:创建 Portal Groups(将系统关联在一起)
Portal Groups 将你的 Jamf Pro 实例关联到 Protect 和/或 Security Cloud,从而启用跨平台设备查找和部署。
创建 Portal Group
- 点击 Jamf Extender 工具栏图标
- 滚动到 "Portal Groups" 部分
- 点击 "Add Group"
- 配置:
- Group Name: 描述性名称(例如 "Production" 或 "Dev Environment")
- Jamf Pro Instance: 从下拉菜单中选择(必须先配置)
- Security Cloud Customer ID: (可选)如果部署域名阻止则选择
- Jamf Protect Instance: (可选)如果部署 Prevent Lists 则选择
- ⚠️ 一个 Portal Group 至少需要一个 Protect 或 Security Cloud
- 点击 "Add Group"
Portal Group 示例:
Name: Production Environment
Jamf Pro: https://myorg.jamfcloud.com
Security Cloud: Customer ID 12345
Jamf Protect: https://overview.protect.jamfcloud.com
Portal Groups 为何重要:
- 该扩展会自动检测要部署到哪个 Protect/Security Cloud 实例
- Jamf Pro 中的设备详情页面显示跨平台数据(漏洞、威胁等)
- AI Visibility 部署会自动路由到正确的系统
第 1 部分:AI Visibility 面板与部署
现在到了有趣的部分!从 Jamf Account 部署 AI 治理阻止。
访问 AI Visibility
- 导航到 Jamf Account:
account.jamf.com - 使用你的 Jamf 凭据登录
- 前往:AI Governance → AI Visibility
- 选择你的环境(如果你管理多个)
你将看到:
- "N unique products in use" 计数
- 检测到的每个 AI 工具的产品卡片(例如 Claude、Cursor、ChatGPT)
- 每张卡片显示:
- 产品名称和 bundle ID
- Launchers(主应用的 signing ID)
- Commands(辅助进程的 signing ID)
- 所选时间窗口内的事件计数

了解阻止状态指示器
Jamf Extender 会注入实时状态指示器,显示已被阻止的内容:
在点击任何内容之前,请留意:
- 产品旁的绿色标记: "✓ Block Configured in Protect"
- 进程旁的绿色标记: "✓ Block Configured"
- 标题摘要标记:
- "✓ All prevent lists configured (N)" — 所有内容均已被阻止
- "N of M signing IDs blocked in Protect" — 部分覆盖
这些指示器会自动出现——无需配置。它们会实时检查你的 Protect 实例。首次加载时可能需要片刻才会显示。
部署阻止(所有产品)

要阻止页面上检测到的所有 AI 工具:
点击 "Configure Additional Blocks" 按钮
- 位于 "N unique products in use" 计数的左侧
- 覆盖页面上的所有产品
凭据检查(自动进行):
- 扩展根据环境 UUID 解析你的 Protect 实例
- 检查凭据是否具备写入能力(非只读)
- 如果是只读:显示带有设置说明的错误
- 如果就绪:打开部署模态框
选择要阻止的内容:
Custom Prevent Lists:
- 产品以复选框分组
- 每个产品都有:
- ☐ 产品 bundle ID 复选框(例如
com.anthropic.claudefordesktop) - ☐ 每个 launcher/command signing ID 一个复选框 ✅ 关键要点:
- ☐ 产品 bundle ID 复选框(例如
- 勾选标题复选框将勾选所有子复选框
- 子复选框是独立的
- 默认不勾选任何项
- 已被阻止的 ID 显示绿色的 "Already blocked" 徽章
Custom Domain Blocks:
- (如果在 Portal Group 中配置了 Security Cloud)
- 每个产品显示其已知域名
- 勾选要阻止的域名(例如
claude.ai、claude.com) - 域名阻止适用于 macOS、iOS、iPadOS、VisionOS、Android 和 Windows 终端
点击 "Deploy"
结果:
- 成功计数:"Created N Prevent Lists, Skipped M duplicates"
- 任何已存在的条目都会被自动跳过
- Prevent Lists 会立即在所有已部署的 Plan 中生效
最终屏幕上会有按钮,可直接前往 Protect 或 Security Cloud 查看已添加的阻止
部署阻止(单个产品)
要仅阻止一个 AI 工具:
- 找到产品卡片(例如 "Claude")
- 点击 "Block {Product}" 链接
- 位于卡片的控制簇中(day range 选择旁)
- 按照与上述相同的部署流程(仅限于该产品)
最终屏幕上会有按钮,可直接前往 Protect 或 Security Cloud 查看已添加的阻止
验证部署
在 Jamf Protect 中:
- 前往:Configuration → Prevent Lists
- 查找类似命名的新条目:
- "Block AI Tool: com.anthropic.claudefordesktop"
- "Block AI Tool: com.openai.chatgpt.atlas"
- 每个条目都有:
- Type:Custom Prevent List
在 Jamf Security Cloud 中:
- 前往:Policies → Content filtering policy → Custom rules
- 查找新的自定义域名阻止
- 确认域名已列出并已分配到你需要分配的群组
返回 AI Visibility:
- 刷新页面
- 已部署项旁应出现绿色的 "✓ Block Configured" 徽章
最佳实践
1. 使用描述性的 Portal Group 名称
好的名称:"Production"、"Dev - US East"、"QA Environment"
差的名称:"Test"、"Group 1"、"asdf"
原因: 如果你管理多个环境,你会拥有多个 Portal Group。
2. 监控 Prevent List 的有效性
部署后:
- 在 Jamf Protect 中:Alerts → View All
- 筛选:Prevent List blocks
- 检查 AI 工具是否确实被阻止
原因: 验证你的部署在生产环境中正常工作。
3. 允许例外
要允许某个特定的 AI 工具(例如面向开发人员的 Claude):
选项 1 - 不部署其阻止:
- 在部署时不勾选其复选框即可
- 其他工具被阻止,而此工具保持开放
选项 2 - 移除 Prevent Lists:
- 在 Jamf Protect 中:Configuration → Prevent Lists
- 找到 "Block AI Tool: com.anthropic.claudefordesktop" 列表
- 删除它
- 该工具现在被允许
- 在 Jamf Security Cloud → Policies → Content filtering policy → Custom rules 中
- 移除任何不再需要的规则
第 2 部分:Windows AI 策略部署(可选)
除了在网络和进程层面阻止 AI 工具之外,你还可以将策略配置直接部署到 Windows 终端上的 AI 应用。这对于需要以下操作的组织尤其有用:
- 使用组织批准的设置配置 AI 工具(例如已批准的模型、API 端点、功能标志)
- 通过 MDM 在 Windows 设备群中强制实施一致的配置
- 使用受管理的设置部署 Claude Code 或 Claude Desktop

部署的内容
Jamf Extender 会生成 Windows 部署软件包,将策略配置写入 Windows Registry:

Claude Code:
- Registry path:
HKLM\SOFTWARE\Policies\ClaudeCode\Settings - 格式:包含所有设置的单个压缩 JSON 字符串
- 部署方式:验证并写入注册表值的 PowerShell 脚本
Claude Desktop (Claude Cowork):
- Registry path:
HKLM\SOFTWARE\Policies\Claude - 格式:每个设置键一个注册表值(例如
model、temperature) - 部署方式:写入各个字符串值的 PowerShell 脚本
为 Windows 导出策略
导航到 AI Policies:
- 前往 Jamf Account 中的:AI Governance → AI Policies
- 找到你想要部署到 Windows 的策略
导出单个策略:
- 点击策略旁的三点菜单 (⋯)
- 选择 "Export for Windows"
- 浏览器下载一个类似命名的 ZIP 文件:
claude-code-windows-deploy.zip
或导出所有策略(批量):
- 点击工具栏中的 "Download Policies for Windows"
- 浏览器下载:
ai-policies-windows-deploy.zip - 包含每个策略的单独部署文件夹
了解软件包结构
每个策略导出包含:
claude-code-windows-deploy/
├── Deploy-ClaudeCode-Registry.ps1 # Device-side registry writer
├── intune/
│ ├── Provision-ClaudeCode-Intune.ps1 # Admin provisioner (PowerShell)
│ └── provision_claudecode_intune.py # Admin provisioner (Python/MSAL)
├── metadata.json # Source policy details
└── README.txt # Setup instructions
对于 Claude Desktop 策略,你还会看到:
settings/settings.json # Reference copy of settings
对于批量导出:
ai-policies-windows-deploy/
├── policy-1/ # One folder per policy
│ ├── Deploy-ClaudeCode-Registry.ps1
│ └── intune/...
├── policy-2/
│ ├── Deploy-ClaudeDesktop-Registry.ps1
│ └── intune/...
├── all-policy-import/
│ ├── Import-All-AIPolicies-Intune.ps1 # Multi-policy provisioner
│ └── import_all_aipolicies_intune.py # Multi-policy provisioner
└── metadata.json # Index of all policies
部署选项 1:任何 MDM(手动脚本执行)
设备端脚本(Deploy-*.ps1)可与任何能够执行 PowerShell 脚本的 MDM 配合使用。
步骤:
- 解压 ZIP 软件包
- 审阅
Deploy-ClaudeCode-Registry.ps1或Deploy-ClaudeDesktop-Registry.ps1 - 将脚本上传到你的 MDM(Intune、Workspace ONE 等)
- 分配到 Windows 设备组
- 脚本以 SYSTEM 身份运行并写入注册表
脚本的作用:
- 将策略 JSON 直接嵌入脚本中
- 使用
ConvertFrom-Json验证 JSON 语法(遇到错误立即失败) - 如果注册表键不存在则创建
- 将设置写入相应的 registry path
- 以代码 0(成功)或 1(失败)退出
支持的 MDM 工具:
- Microsoft Intune(Platform Scripts)
- VMware Workspace ONE(Scripts & Sensors)
- 任何能够以 SYSTEM 上下文执行 PowerShell 的 MDM
部署选项 2:Microsoft Intune(自动预配置)
Intune provisioner 通过 Microsoft Graph API 自动将脚本上传到 Microsoft Intune。
选择你的 provisioner:
PowerShell Provisioner (Provision-*-Intune.ps1)
前提条件:
- 具有 PowerShell 5.1+ 的 Windows 计算机
- 已安装 PowerShell Microsoft.Graph 模块:
Install-Module Microsoft.Graph - Entra ID Global Administrator 或 Intune Administrator 角色
步骤:
- 解压 ZIP 软件包
- 导航到:
intune/ - 右键点击
Provision-ClaudeCode-Intune.ps1→ Run with PowerShell - 审阅确认提示,其中显示:
- 策略名称和版本
- 所需的 Intune 权限
- 将在 Intune 中创建的内容
- 输入
Y确认 - 浏览器打开进行交互式 Microsoft 登录(支持 MFA)
- 脚本进行身份验证并将设备端脚本上传到 Intune
- 脚本输出: Intune Platform Script ID 和成功确认
在 Intune Portal 中的后续步骤:
- 前往:Devices → Scripts and remediations → Platform scripts
- 找到你新创建的脚本(例如 "Claude Code Policy v1")
- 点击 Assignments → 添加设备组
- 这些组中的设备将在下次签入时收到该策略
Python/MSAL Provisioner (provision_*_intune.py)
为何使用 Python?
- 可在 Windows、macOS 或 Linux 上运行
- 无需应用注册
- 使用 OAuth device-code flow(基于浏览器,支持 MFA)
- 无需管理任何 secret
前提条件:
pip install msal requests
步骤:
- 解压 ZIP 软件包
- 导航到:
intune/ - 运行:
python provision_claudecode_intune.py - 审阅确认提示
- 输入
yes确认 - 脚本打印:"Go to https://microsoft.com/devicelogin and enter code: XXXXXX"
- 打开浏览器,输入代码,使用 Intune 管理员账户登录
- 脚本完成上传
- 在 Intune Portal 中分配到设备组(与 PowerShell 流程相同)
优势:
- 跨平台(无需 Windows)
- 零应用注册开销
- 基于浏览器的身份验证(熟悉的 MFA 流程)
- 仅使用开源依赖项
批量策略部署(一次部署多个策略)
对于管理多个 AI 策略的组织:
使用 All-Policy Provisioner:
- 解压
ai-policies-windows-deploy.zip - 导航到:
all-policy-import/ - 运行其中之一:
- PowerShell:
Import-All-AIPolicies-Intune.ps1 - Python:
python import_all_aipolicies_intune.py
- PowerShell:
- 单次身份验证流程即可上传所有策略
- 每个策略成为一个单独的 Intune Platform Script
结果:
- 一次运行即创建多个 Intune 脚本
- 每个脚本可分配到不同的设备组
- 适用于向不同团队部署不同配置(例如工程团队与市场团队)
验证 Windows 部署
在测试设备上:
- 打开 Registry Editor(
regedit.exe) - 导航到:
- Claude Code:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\ClaudeCode - Claude Desktop:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Claude
- Claude Code:
- 验证注册表值存在
对于 Claude Code:
- 查找名为
Settings的值(REG_SZ) - 该值包含压缩的 JSON(无换行符)
对于 Claude Desktop:
- 多个值,每个设置键一个
- 每个值都是字符串(即使对于布尔值/数字也是如此)
- 启动应用(Claude Code 或 Claude Desktop)
- 验证设置已强制实施(例如模型选择、API 端点)
故障排除:
- 如果注册表值缺失:检查 MDM 脚本执行日志
- 如果应用忽略设置:确保应用版本支持受管理的注册表设置
- 如果脚本失败:检查
metadata.json是否有验证错误
Schema 验证(仅限 Claude Code)
Claude Code 策略在部署前会针对官方 JSON schema 进行验证:
验证发生在:
- 导出时(在 Jamf Extender 中)
- 脚本执行时(设备端 PowerShell 验证 JSON 语法)
验证的内容:
- 类型不匹配(例如期望布尔值处出现字符串)
- 无效的枚举值(例如不受支持的模型名称)
- 未知的配置键
- 环境变量命名(必须为大写、字母数字加下划线)
错误显示位置:
- 导出期间在浏览器中(如有严重错误则阻止下载)
- 导出后在
README.txt中(仅警告) - 在 PowerShell 脚本输出中(JSON 解析失败)
Claude Desktop:
- 无已发布的 schema(按原样部署)
- 管理员需负责对照 Claude Desktop 文档验证设置
Windows 部署最佳实践
1. 生产前先测试
- 首先部署到试点设备组
- 验证注册表值已正确写入
- 使用受管理的设置测试应用行为
2. 为你的策略设定版本
- 策略版本嵌入在 Intune 脚本名称中(例如 "Claude Code Policy v2")
- 更新策略会创建新版本
- 旧版本会保留在 Intune 中,除非手动删除
3. 使用描述性的策略名称
- 好:
Claude Code - Engineering Team - GPT-4 Only - 差:"Policy 1"、"Test"、"asdf"
- 策略名称会显示在 Intune Platform Script 列表中
4. 保持凭据安全
- Intune provisioner 使用交互式身份验证(不嵌入凭据)
- 设备端脚本仅包含策略 JSON(无 secret)
- 如果提取的软件包包含敏感设置,切勿将其提交到源代码管理中
5. 部署前先审阅
- 始终检查软件包中的
README.txt - 审阅元数据中的验证错误/警告
- 在 MDM 上传前于开发机上测试 PowerShell 脚本语法
Windows 部署限制
此功能不会做的事:
- 不会安装 Claude Code 或 Claude Desktop(需要单独部署)
- 不会在进程层面阻止 AI 工具(请使用 Jamf Protect)
- 在 macOS 上不起作用(请使用 macOS MDM profile 或基于文件的设置)
- 不会部署到 Linux 终端
仅限注册表:
- 基于文件的设置(例如应用目录中的
settings.json)不会被写入 - 应用必须从注册表策略位置读取
- 请验证你的应用版本支持基于注册表的受管理设置
支持与反馈
- GitHub Issues: https://github.com/Jamf-Concepts/Jamf-Extender/issues
- 文档: https://github.com/Jamf-Concepts/Jamf-Extender
- 问题咨询: 提交带有 "question" 标签的 issue
如果你发现了未知工具的 signing ID:
- 运行:
codesign -dv /Applications/YourApp.app - 捕获:Bundle ID、Team ID、域名
- 提交 GitHub issue 并附上验证报告
你的贡献会帮助整个 Jamf 社区!