PowerShell修改Defender计划扫描设置不生效但注册表已变更的问题
关于Windows Defender扫描计划设置不生效的问题分析与解决
我帮你捋捋这个问题——你遇到的情况其实是Windows Defender配置加载逻辑导致的典型现象,咱们一步步拆解:
核心原因:配置缓存与加载机制差异
你用Set-MpPreference -ScanScheduleDay 5和Set-MpPreference -ScanScheduleTime 03:57修改后,注册表立即更新,但Get-MpPreference显示旧值,甚至重启后依旧,本质是:
Get-MpPreference读取的是Windows Defender服务(WinDefend)缓存的配置,而非直接读取注册表;- 扫描计划类的配置(比如扫描日、时间)属于需要服务重启或任务计划同步的项,不像实时监控开关那样会立即触发服务刷新缓存;
- 如果你的设备是企业环境,还可能存在组策略(GPO)或MDM(如Intune)的强制配置,直接覆盖了本地注册表的修改,导致
Get-MpPreference始终显示管控策略的值。
验证设置是否真的生效的方法
别光看Get-MpPreference,可以通过任务计划程序确认扫描计划是否实际被修改:
- 打开任务计划程序,导航到路径:
Task Scheduler Library > Microsoft > Windows > Windows Defender; - 找到
Windows Defender Scheduled Scan任务,双击查看触发器标签页; - 检查触发器的“每周”设置里,是否对应你设置的周五(5对应周五,取值规则:0=每天,1=周一,2=周二…7=周日)和03:57的时间。如果这里的配置是对的,说明你的设置其实已经生效,只是
Get-MpPreference没读取到最新缓存。
解决Get-MpPreference显示不一致的步骤
1. 重启Windows Defender服务强制刷新缓存
以管理员身份打开PowerShell,执行以下命令:
Restart-Service WinDefend -Force
重启完成后再运行Get-MpPreference,查看ScanScheduleDay和ScanScheduleTime是否显示为你设置的值。
2. 检查是否有组策略/MDM管控
如果重启服务后还是没变化,大概率是被集中管控覆盖了:
- 组策略检查:打开
gpedit.msc,导航到Computer Configuration > Administrative Templates > Windows Components > Windows Defender Antivirus > Scan; - 查看
指定每周扫描日和指定每周扫描时间这两个策略是否被设置为“已启用”,如果是,本地的注册表修改会被忽略,需要联系管理员调整组策略,或者在允许的范围内修改。
为什么其他设置(如禁用实时监控)正常生效?
像Set-MpPreference -DisableRealtimeMonitoring 1这类实时防护相关的设置,Windows Defender服务会立即监听注册表变更并应用,不需要重启服务或同步任务计划,所以你能在Windows安全应用里看到即时生效的结果,和扫描计划的加载逻辑不一样。
内容的提问来源于stack exchange,提问作者Samuel




