Get-MMAgent 是 PowerShell 中的一个命令,用于获取有关 Microsoft Defender ATP (Advanced Threat Protection) 的代理设置及其相关配置。它是 MMAgent(Microsoft Monitoring Agent)的一个管理工具。
Get‑MMAgent 拆解 解构 底层原理 依赖文件 依赖关系 逻辑链路 配套链
概念澄清Get‑MMAgent属于 Microsoft Monitoring Agent (MMA,Log Analytics Agent 旧名称) PowerShell cmdlet;MMA 代理早期用于:OMS 日志分析、Microsoft Defender for Endpoint(旧名 Defender ATP)本地代理。注意:MMA 已弃用,微软主推新代理 Azure Monitor Agent (AMA)。Get‑MMAgent读取本地 MMA 代理配置、状态、工作区 ID、代理网关、证书、健康状态。不是 Defender for Endpoint 原生内置命令;安装 MMA 代理之后才会注册该 Cmdlet,干净 Windows 系统不存在。
PowerShell Get‑MMAgent
↓
Microsoft.MMAgent.PowerShell.dll (MMA PowerShell模块)
↓
读取本地注册表 + 调用MMA代理服务 API
↓
MMAgent 服务:HealthService (HealthService.exe)
↓
配置来源:注册表、%ProgramFiles%\Microsoft Monitoring Agent\ 配置文件、证书存储
↓
上报链路:Agent → 网关(可选) → Log Analytics / Defender ATP 云端
一、底层原理
1、模块加载前提
Get‑MMAgent 不属于 Windows 系统自带 PowerShell;安装 Microsoft Monitoring Agent (MMA) 才会注册模块。
C:\Program Files\Microsoft Monitoring Agent\Agent\PowerShell\Microsoft.MMAgent.PowerShell.dll
Import‑Module Microsoft.MMAgent.PowerShell2、核心工作原理
Get‑MMAgent 不会直接读取云端,全部读取本机本地配置与代理运行状态:- 读取注册表获取已绑定 Log Analytics 工作区 ID、代理网关设置、代理模式;
- 与本地
HealthService.exe(MMA 主服务)交互,获取代理运行时健康状态; - 读取本地计算机证书存储,读取 MMA 使用的身份证书;
- 输出结构化 PSObject 对象:包含 WorkspaceId、ProxySettings、AgentStatus、Gateway、Version 等属性。
相关配套 Cmdlet:
Set‑MMAgentProxy:配置 MMA 代理服务器Add‑MMAgentWorkspace:添加 Log Analytics 工作区Remove‑MMAgentWorkspace:移除工作区
3、MMA(HealthService.exe)代理本体原理
- 采集 Windows 事件日志、性能计数器、ETW 事件;
- 使用证书认证,上报数据到 Log Analytics 云端;
- 可配置网关(OMS Gateway),机器无需直接访问公网;
- Defender for Endpoint (旧 ATP) 早期本地模式依赖 MMA 上报;新版 MDE 不再依赖 MMA。
⚠️重要历史:
- 旧版 Defender ATP(MDE)本地部署方案,使用 MMA 作为数据上报代理;
- 当前现代 MDE 使用
Sense.exe,不再依赖 MMAgent;MMA 已经进入弃用生命周期。
二、依赖文件清单
| 文件 | 说明 |
|---|---|
Microsoft.MMAgent.PowerShell.dll |
Get‑MMAgent Cmdlet 本体,MMA 安装后才存在 |
HealthService.exe |
MMA 代理主服务进程 |
HealthService.dll |
MMA 核心业务逻辑 |
配置文件:%ProgramFiles%\Microsoft Monitoring Agent\Agent\Health Service State\ |
代理缓存、配置缓存 |
注册表:HKLM\SYSTEM\CurrentControlSet\Services\HealthService |
MMA 服务配置 |
注册表:HKLM\Software\Microsoft\Microsoft Operations Manager\3.0\Agent Management Groups |
工作区、网关配置存储位置 |
| 证书存储 LocalMachine\My | MMA 身份认证证书 |
系统服务
- HealthService:Microsoft Monitoring Agent 服务;
Get‑MMAgent获取运行状态依赖该服务。服务未运行,部分运行时状态字段返回空。
三、依赖关系梳理
- 软件依赖
必须安装 Microsoft Monitoring Agent (MMA);纯净 Windows、只装 MDE 的机器没有该命令。
# 验证模块是否存在
Get‑Module‑ListAvailable Microsoft.MMAgent.PowerShell
-
权限依赖需要本地管理员权限;读取服务状态、注册表、本地机器证书存储。普通用户执行部分字段为空。
-
服务依赖HealthService 服务停止:可以读取静态注册表配置,但无法读取 Agent 运行时健康状态。
-
网络依赖
Get‑MMAgent本身不访问网络;只读取本地配置;真正上报是 HealthService 服务完成。 -
版本演进依赖
- MMA(旧):Get‑MMAgent;
- AMA(Azure Monitor Agent,新一代):没有 Get‑MMAgent,使用
Get‑AzMonitorAgent/ WMI/CIM 查询。
- Defender ATP/MDE 关系
历史绑定:早期 Defender ATP 本地代理方案复用 MMA;当前版本:MDE (Sense.exe) 独立,不再依赖 MMAgent,很多机器 MDE 正常运行但没有 MMA。
四、完整逻辑链路
链路:执行 Get‑MMAgent
Import‑Module Microsoft.MMAgent.PowerShell
Get‑MMAgent
- PowerShell 加载
Microsoft.MMAgent.PowerShell.dll; - Cmdlet 读取本地注册表,读取绑定的工作区 ID、网关地址、代理配置;
- 连接本地 HealthService 服务,查询代理运行时状态、版本;
- 读取本地机器证书存储,获取 MMA 上报使用的客户端证书信息;
- 组装 PSObject 输出对象,包含:
- AgentVersion:代理版本
- WorkspaceIds:绑定的 Log Analytics 工作区
- ProxySettings:HTTP 代理配置
- Gateway:OMS 网关配置
- AgentStatus:代理运行状态
- 不会发起任何云端 API 调用,全部本地信息返回。
配套链路:Set‑MMAgentProxy 设置代理
Set‑MMAgentProxy‑Proxy "http://proxy:8080"‑BypassLocal $true
- Cmdlet 写入注册表代理配置;
- 通知 HealthService 服务重载配置;
- 代理后续上报流量走配置代理。
五、配套链:实操示例
# 导入模块
Import‑Module "C:\Program Files\Microsoft Monitoring Agent\Agent\PowerShell\Microsoft.MMAgent.PowerShell.dll"
# 获取MMAgent全部配置
Get‑MMAgent | Format‑List *
# 查看绑定的工作区
(Get‑MMAgent).WorkspaceIds
# 设置HTTP代理
Set‑MMAgentProxy‑Proxy "http://192.168.1.100:8080"
# 清空代理
Set‑MMAgentProxy‑Proxy $null
六、高频故障排查清单
- Get‑MMAgent:不是有效的 Cmdlet
没有安装 Microsoft Monitoring Agent (MMA)。该命令非系统自带。
- 只能读取版本,AgentStatus 为空
HealthService 服务未启动;启动服务:Start‑Service HealthService。
- 修改 Set‑MMAgentProxy 后配置不生效
修改配置后需要重启 HealthService 服务:
Restart‑Service HealthService
- MDE (Defender for Endpoint) 正常,但是找不到 Get‑MMAgent
新版 MDE 不依赖 MMA 代理,MMA 是独立组件,需要单独安装。
- MMA 代理无法上报云端,但是 Get‑MMAgent 显示配置正常
Get‑MMAgent 只读取本地配置,不代表网络连通正常;需要看 HealthService 事件日志。
七、关键认知误区澄清
Azure Monitor Agent (AMA) vs Get‑MMAgent (MMA) 拆解解构
背景:
- MMA (Microsoft Monitoring Agent,已弃用):
Get‑MMAgent是 MMA 配套 PowerShell Cmdlet; - AMA (Azure Monitor Agent,微软当前主推新一代代理):没有 Get‑MMAgent,有完全不同的实现、配置存储、查询方式。
MMA:HealthService.exe;AMA:MonAgent.exe / MonAgentCore.exe。
【MMA 旧代理】
PowerShell Get‑MMAgent
↓
Microsoft.MMAgent.PowerShell.dll
↓
注册表 + IPC交互 HealthService.exe(MMA)
↓
注册表HKLM\Software\Microsoft\Microsoft Operations Manager\3.0
配置目录:%ProgramFiles%\Microsoft Monitoring Agent\Agent
【AMA 新一代代理】
CIM/WMI / 注册表 / 本地配置文件
↓
MonAgent.exe、MonAgentCore.exe(AMA主进程)
↓
注册表 HKLM\SYSTEM\CurrentControlSet\Services\AzureMonitorAgent
配置目录:C:\Program Files\Azure Monitor Agent\
↓
Azure ARM推送数据收集规则(DCR) → 上报Azure Monitor
一、底层原理
1、Get‑MMAgent(MMA 代理)底层原理
Get‑MMAgent 属于 MMA 代理安装后注册的 PowerShell 模块,系统原生不存在。- 模块文件:
Microsoft.MMAgent.PowerShell.dll;安装 MMA 后部署到代理目录。 - 数据来源全部本地,不调用 Azure 云端 API:
- 读取注册表:工作区 ID、OMS 网关、http 代理配置;
- 通过本地 IPC 与
HealthService.exe通信,获取代理运行时状态、版本、健康状态; - 读取本地计算机证书存储,读取 MMA 上报用客户端证书;
- 输出结构化对象:
AgentVersion、WorkspaceIds、ProxySettings、Gateway、AgentStatus。 - 配套 Cmdlet:
Set‑MMAgentProxy、Add‑MMAgentWorkspace、Remove‑MMAgentWorkspace。
MMA 配置模式:本地配置(安装向导 / PowerShell)绑定 Log Analytics 工作区 ID。
2、Azure Monitor Agent AMA 底层原理
- 双进程模型
MonAgent.exe:代理管理、生命周期、扩展管理;Windows 服务AzureMonitorAgentMonAgentCore.exe:采集 ETW、事件日志、性能计数器,执行上报。
- 核心变化:配置不再本地写死工作区 ID
AMA 使用 DCR (Data Collection Rule,数据收集规则),配置从 Azure 云端 ARM 平台主动下发;本地只保存缓存。
- 本地查询 AMA 状态:使用 CIM (WMI)、读取注册表、读取本地 json 缓存配置文件,没有专用 PowerShell Cmdlet。
- 认证:使用VM 系统分配托管标识(MI),不再依赖 MMA 的客户端证书。
关键差异|MMA|AMA||---|---|| 本地配置工作区 ID | 云端 DCR 规则下发,本地无硬编码工作区 ID|| 客户端证书认证 | 虚拟机托管标识 MI||PowerShell:Get‑MMAgent | 无原生 Cmdlet,使用 CIM / 注册表查询 || 进程 HealthService.exe | 进程 MonAgent.exe/ MonAgentCore.exe|| 支持 OMS 网关 | 支持 AMA 网关 |
二、依赖文件清单
MMA(对应 Get‑MMAgent)
| 文件路径 | 作用 |
|---|---|
C:\Program Files\Microsoft Monitoring Agent\Agent\PowerShell\Microsoft.MMAgent.PowerShell.dll |
Get‑MMAgent Cmdlet 本体 |
HealthService.exe |
MMA 核心服务进程 |
HKLM\Software\Microsoft\Microsoft Operations Manager\3.0\Agent Management Groups |
工作区、网关、代理注册表配置 |
%ProgramFiles%\Microsoft Monitoring Agent\Agent\Health Service State\ |
代理本地缓存、状态文件 |
LocalMachine\My 证书存储 |
MMA 客户端上报证书 |
服务名:HealthService |
MMA 主服务 |
AMA(Azure Monitor Agent)
| 文件路径 | 作用 |
|---|---|
C:\Program Files\Azure Monitor Agent\MonAgent.exe |
AMA 管理主程序 |
C:\Program Files\Azure Monitor Agent\MonAgentCore.exe |
采集上报核心进程 |
C:\Program Files\Azure Monitor Agent\Configs\ |
DCR 规则本地缓存 json 文件 |
注册表:HKLM\SYSTEM\CurrentControlSet\Services\AzureMonitorAgent |
服务参数、代理配置 |
注册表:HKLM\SOFTWARE\Microsoft\AzureMonitorAgent |
AMA 本地配置 |
服务名:AzureMonitorAgent |
AMA 系统服务 |
三、依赖关系梳理
Get‑MMAgent (MMA) 依赖
- 必须安装 Microsoft Monitoring Agent,纯净 Windows 无此命令;
- 需要本地管理员权限,读取注册表、证书存储、访问 HealthService IPC;
HealthService服务停止:静态配置可以读取,运行时AgentStatus字段为空;- Get‑MMAgent 本身不访问网络;上报网络 IO 由 HealthService 服务完成;
- MMA 已经弃用,不再新增功能,微软建议迁移至 AMA。
AMA 依赖
- 虚拟机需要开启 系统托管标识(System‑assigned Managed Identity),用于向 Azure 鉴权;
- 网络:虚拟机需要访问 Azure Monitor 终结点;可配置 AMA 网关;
- 配置源:主要来自 Azure DCR 云端下发;本地文件仅为缓存;直接修改本地 json 不会持久生效;
- 查询 AMA 状态:管理员权限读取 CIM 类 / 注册表;没有 Get‑MMAgent 等价的官方 Cmdlet。
四、完整逻辑链路
链路 1:Get‑MMAgent (MMA) 执行链路
Import‑Module Microsoft.MMAgent.PowerShell
Get‑MMAgent
- PowerShell 加载
Microsoft.MMAgent.PowerShell.dll; - 读取注册表获取绑定工作区、网关、http 代理静态配置;
- IPC 通信连接本地
HealthService.exe,获取代理运行状态、版本; - 读取本地机器证书存储,获取上报证书信息;
- 组装 PSObject 输出所有本地配置信息;不访问 Azure 云端。
链路 2:AMA 代理完整工作链路
- Windows 服务
AzureMonitorAgent(MonAgent.exe)启动; - 使用虚拟机系统托管标识向 Azure IMDS 元数据服务获取 token;
- 请求 Azure Resource Manager,拉取分配给 VM 的 DCR 数据收集规则;本地缓存 json;
MonAgentCore.exe按照 DCR 规则采集事件日志、性能计数器、ETW;- 加密上报到 Azure Monitor;
- 管理员本地查询状态:查询 CIM 类 / 注册表,读取本地缓存配置。
AMA 本地查询示例(替代 Get‑MMAgent)
# 查询AMA代理版本、状态
Get‑CimInstance‑Namespace root\Microsoft\AzureMonitorAgent‑ClassName AMA_AgentInformation
五、配套链:实操命令
MMA(Get‑MMAgent)
# 加载MMA模块
Import‑Module "C:\Program Files\Microsoft Monitoring Agent\Agent\PowerShell\Microsoft.MMAgent.PowerShell.dll"
# 获取全部MMA配置
Get‑MMAgent | Format‑List *
# 设置MMA代理
Set‑MMAgentProxy‑Proxy "http://proxy:8080"
Restart‑Service HealthService
AMA 查询本地状态(无 Get‑MMAgent)
# 获取AMA代理信息
Get‑CimInstance‑Namespace root\Microsoft\AzureMonitorAgent‑ClassName AMA_AgentInformation | Format‑List *
# 查看AMA服务状态
Get‑Service AzureMonitorAgent
# 查看本地缓存DCR配置,直接修改不生效
dir "C:\Program Files\Azure Monitor Agent\Configs\"
六、故障排查清单
MMA (Get‑MMAgent) 故障
Get‑MMAgent 不是 cmdlet:未安装 MMA 代理;- AgentStatus 为空:
HealthService服务未启动; - Set‑MMAgentProxy 修改代理不生效:修改后需要重启
HealthService; - Get‑MMAgent 显示配置正常,但上报失败:该命令只读取本地,看
HealthService事件日志排查网络 / 证书问题。
AMA 代理故障
- CIM 查询返回空:AMA 未安装;
- DCR 规则本地看不到:检查托管标识是否启用、虚拟机网络能否访问 Azure;
- 本地修改 Configs 下 json:重启服务后会被云端 DCR 覆盖,修改无效。
七、关键认知误区澄清


Get-MMAgent 是 PowerShell 中的一个命令,用于获取有关 Microsoft Defender ATP (Advanced Threat Protection) 的代理设置及其相关配置。它是 MMAgent(Microsoft Monitoring Agent)的一个管理工具。
1. 什么是 Get-MMAgent?
Get-MMAgent 是 PowerShell 中用于查询 Microsoft Defender ATP 代理(MMAgent)状态和配置的命令。它可以返回关于代理设置的信息,例如启用的功能、配置的限制和其他相关参数。
2. 它的作用是什么?
Get-MMAgent 主要用于:
- 查看 MMAgent 配置的当前状态。
- 调试和诊断 Microsoft Defender ATP 代理的运行情况。
- 管理和查看代理的一些重要设置(例如内存压缩、应用程序启动预读取等)。
3. 它会返回哪些信息?
执行 Get-MMAgent 命令时,您会获得有关 Microsoft Defender ATP 代理的一些配置项的详细信息。例如:
- ApplicationLaunchPrefetching:是否启用应用程序启动预读取。
- ApplicationPreLaunch:是否启用应用程序预启动。
- MaxOperationAPIFiles:最大操作 API 文件数。
- MemoryCompression:是否启用内存压缩。
- OperationAPI:是否启用操作 API。
- PageCombining:是否启用页面合并。
- PSComputerName:显示执行此命令的计算机名称。
这些选项的设置帮助您优化和管理设备的安全防护以及与 Defender ATP 服务的交互。
4. 为什么使用 Get-MMAgent?
- 诊断和问题排查: 如果您在使用 Microsoft Defender ATP 时遇到问题,
Get-MMAgent可以帮助您查看代理配置和状态,确认是否有任何不正常的配置。 - 检查配置: 确认是否启用了某些功能,如内存压缩或操作 API,帮助确保 Microsoft Defender ATP 以最佳方式运行。
- 系统监控: 在系统管理过程中,您可能需要定期检查代理的设置,确保它符合公司或安全要求。
5. 如何使用 Get-MMAgent?
只需要在 PowerShell 中运行以下命令:
Get-MMAgent
这将返回当前 Microsoft Monitoring Agent 的配置和状态信息。
总结来说,Get-MMAgent 是用于查看和管理 Microsoft Defender ATP 代理状态的 PowerShell 命令,能够帮助系统管理员确认安全代理的运行状况及相关配置。
Get-MMAgent 返回的字段翻译:
-
ApplicationLaunchPrefetching:应用程序启动预读取(是否启用应用程序预读取功能)
- 值: False(禁用)
-
ApplicationPreLaunch:应用程序预启动(是否启用应用程序预启动功能)
- 值: False(禁用)
-
MaxOperationAPIFiles:最大操作API文件数(允许的最大操作API文件数)
- 值: 512(最大 512 个文件)
如何设置
MaxOperationAPIFiles这个参数控制着 Windows 预取(Prefetch)功能可以同时追踪和缓存的程序文件数量上限。默认值通常是 512。操作步骤
- 在开始菜单搜索 PowerShell。
- 右键点击它,选择 “以管理员身份运行”。
- 在打开的蓝色窗口中,输入以下命令并按回车:
(你可以将powershell
Set-MMAgent -MaxOperationAPIFiles 81928192替换为 1 到 8192 之间的任意数字。) - 要验证设置是否成功,可以再次输入命令:
查看powershell
Get-MMAgentMaxOperationAPIFiles后面的数值是否已改变。
- 值: 512(最大 512 个文件)
-
MemoryCompression:内存压缩(是否启用内存压缩)
- 值: False(禁用)
MemoryCompression(内存压缩)是 Windows 的一项核心内存管理技术,可以将其理解为一种 “用 CPU 资源换取内存空间” 的策略。当物理内存(RAM)使用率较高时,系统会自动将不活跃的程序数据压缩后,继续保留在内存中,而不是立即写入速度较慢的硬盘虚拟内存(分页文件)。下面为你详细解析开启与关闭的区别、操作方法以及如何选择。⚖️ 开启与关闭的核心区别
简单来说,这是一个在 内存空间 和 CPU 性能 之间做权衡的选择。特性 开启内存压缩 (默认) 关闭内存压缩 内存占用 更低。通过压缩,有效增加了可用内存,可以多开程序。 更高。不活跃的数据会被直接写入硬盘,释放物理内存。 CPU 占用 轻微增加。压缩和解压数据需要消耗少量 CPU 资源。 降低。CPU 无需处理压缩任务。 系统响应 更快。从内存读取压缩数据远比从硬盘读取虚拟内存快,减少卡顿。 可能变慢。内存不足时,系统频繁读写硬盘,可能导致卡顿。 硬盘寿命 有益。大幅减少对固态硬盘(SSD)的写入次数。 无影响。会增加对虚拟内存文件的读写。 查看当前状态
- 右键点击“开始”菜单,选择 “Windows PowerShell (管理员)” 或 “终端 (管理员)”。
- 输入以下命令并按回车:
powershell
Get-MMAgent - 查看输出结果中的
MemoryCompression项:True:表示已开启。False:表示已关闭。
开启:Enable-MMAgent -MemoryCompression
禁用关闭:Disable-MMAgent -MemoryCompression
- 值: False(禁用)
-
OperationAPI:操作API(是否启用操作API)
- 值: False(禁用)
OperationAPI是 Windows 内存管理器(MMAgent)中的一个组件,主要用于优化文件操作的性能。简单来说,它的作用是允许系统更高效地处理文件的读取、写入和元数据操作。开启后,系统在处理大量小文件或频繁的文件 I/O(输入/输出)时,能减少内核模式下的开销,从而提升响应速度。以下是关于OperationAPI的详细解析、开启与关闭的区别以及操作方法。⚖️ 开启与关闭的区别
这个设置主要影响的是文件系统的吞吐量和延迟,尤其是在高负载场景下。特性 开启 OperationAPI (推荐) 关闭 OperationAPI 文件操作性能 更高。系统能更高效地调度文件读写请求,减少 CPU 在文件管理上的开销。 较低。处理大量文件操作时,系统开销相对较大。 适用场景 适合开发编译、视频渲染、数据库操作或频繁读写大量小文件的场景。 仅建议在排查特定文件系统驱动兼容性问题时临时关闭。 资源消耗 极低。它是一种优化机制,几乎不占用额外资源。 无。 默认状态 现代 Windows 10/11 通常默认为 开启 ( True)。- 通俗理解:
如果把硬盘读写比作图书馆借书,关闭时,你每次都要去柜台人工办理(传统方式);开启后,系统给你发了一张自助卡,你可以更快地批量借出或归还书籍(优化后的 API 方式),减少了排队和处理时间。🛠️ 如何操作:查看、开启与关闭
操作需要通过 PowerShell 以管理员身份运行。1. 查看当前状态
- 右键点击“开始”菜单,选择 “Windows PowerShell (管理员)” 或 “终端 (管理员)”。
- 输入以下命令并按回车:
powershell
Get-MMAgent - 查看输出结果中的
OperationAPI项:True:表示已开启。False:表示已关闭。
2. 开启 OperationAPI
在管理员 PowerShell 中执行以下命令:powershellEnable-MMAgent -OperationAPI注意:通常不需要重启即可生效,但如果想确保所有服务都应用此设置,重启是一个好习惯。3. 关闭 OperationAPI
在管理员 PowerShell 中执行以下命令:powershellDisable-MMAgent -OperationAPI💡 建议与总结
- 普通用户:保持开启。这是 Windows 优化的标准配置,能为你日常的文件复制、软件启动提供微小的性能加成。
- 开发者/专业用户:务必开启。特别是在编译大型代码项目(如 C++)或使用 Docker 等涉及大量文件读写的操作时,开启此功能可以减少编译时间。
- 故障排查:只有在极少数情况下,如果系统出现文件系统相关的蓝屏或驱动冲突,技术人员可能会建议暂时关闭它以排查是否是此优化机制导致的兼容性问题。
一句话总结: 除非你遇到了严重的系统兼容性问题,否则请保持OperationAPI处于开启状态,它是提升系统文件处理效率的有效手段。
- 值: False(禁用)
-
PageCombining:页面合并(是否启用页面合并)
- 值: False(禁用)
-
PSComputerName:计算机名称(计算机的名称)
- 值: (可能为空或显示当前计算机的名称)
这些属性都表示当前的 MMAgent 配置选项,且大部分设置为禁用。

浙公网安备 33010602011771号