一条命令禁用 Windows Defender 与防火墙:no-defender 全场景操作与故障定位
【免费下载链接】no-defenderA slightly more fun way to disable windows defender + firewall. (through the WSC api)项目地址: https://gitcode.com/GitHub_Trending/no/no-defender
软件冲突、杀毒误报、隔离测试需要临时关掉防护时,手动停服务再改组策略既慢又容易出错,重启后还全部打回原形。no-defender 是一款走 Windows 安全中心(WSC)接口的开源工具,一条命令就能禁用 Windows Defender 或关闭 Windows 防火墙,也支持一键还原。
它凭什么能关掉 Defender:WSC 接口原理
Windows 内置一个 WSC(Windows Security Center)服务,第三方杀毒产品通过它向系统通报"我已经就位",系统收到这条声明后就会自动停用 Defender。no-defender 不动注册表、不改组策略,而是向 WSC 上报"本机已存在第三方杀毒"这一条声明,防护控制权随之交接——正规杀毒软件就是靠这条通道接管防线的。
和手动改组策略相比,区别在于:开关走的是系统自身认可的接口,不逐项修改任何策略条目,还原时同样只需一条命令。
提示:WSC 接口没有公开文档,该工具是对其反向实现,原理细节可参考项目文档的 How it works 一节。
动手前:确认环境并记录系统基线
动手之前必须做一件事:用管理员权限打开 PowerShell,把系统现状查一遍,输出留底,之后好做对比。
先查 Defender 宿主服务:
Get-Service WinDefend作用:查看
WinDefend当前是Running还是Stopped。
再查三种网络配置文件下的防火墙开关:
Get-NetFirewallProfile | Select Name, Enabled作用:列出域、专用、公用三种配置下防火墙各自的状态,
True表示启用。
然后是工具本身。上游仓库曾因 DMCA 被下架,目前仓库内以说明文档为主;如果本地已有no-defender-loader可执行文件,可以直接跳到下一节:
git clone https://gitcode.com/GitHub_Trending/no/no-defender cd no-defender作用:把项目拉取到当前目录。
三种场景:临时禁用、跨重启保持、恢复防护
场景一:临时禁用 Defender(--av)
第一条禁用命令,只关 Defender:
no-defender-loader --av作用:向系统声明已有第三方杀毒在场,Windows 随即自动停用 Defender。
执行完马上验证一次:
Get-MpComputerStatus | Select RealTimeProtectionEnabled作用:禁用生效后,
RealTimeProtectionEnabled应为False。
注意:执行后宿主服务可能仍在运行,真正被关闭的是实时保护,不是服务本身,不要只盯着服务状态。
场景二:跨重启保持禁用
要让禁用效果在重启后依然有效,工具会自动把自己写入自启动项。前提是:no-defender的可执行文件必须一直保留在磁盘上——文件一删,持久化随之失效。
提示:启用持久化后,系统启动项里会多出一条记录,属于预期行为。若要彻底清理,应先执行
no-defender-loader --disable还原,再移除自启动项。
重启后验证持久化是否生效:
Get-MpComputerStatus | Select RealTimeProtectionEnabled作用:重启后重跑一次,状态仍为
False即持久化成功。
场景三:恢复防护(--disable)
测试结束、不再需要禁用时,一条命令还原:
no-defender-loader --disable作用:撤销之前声明的"在场杀毒",重新启用 Defender 与 Windows 防火墙。
还原后交叉确认:
Get-NetFirewallProfile | Select Name, Enabled作用:确认三个防火墙配置文件全部回到
True。
Get-MpComputerStatus | Select RealTimeProtectionEnabled作用:实时保护应恢复为
True。
参数按使用场景组合
下表按使用场景整理了常用参数组合:
| 使用场景 | 参数 | 示例命令 |
|---|---|---|
| 只关 Defender | --av | no-defender-loader --av |
| 只关 Windows 防火墙 | --firewall | no-defender-loader --firewall |
| 两者同时关闭 | --av --firewall | no-defender-loader --av --firewall --name "My Test AV" |
| 重新启用(还原) | --disable | no-defender-loader --disable |
| 查看帮助 / 版本 | --help/--version | no-defender-loader --help |
其中--name用来指定向 WSC 上报的"在场杀毒"名称,不指定则使用默认名;完整参数说明见 README Usage 段落。
禁用不生效的排查路径:服务层、日志层、系统文件层
命令执行了、防护状态却没变化时,别急着怀疑工具,按服务层 → 日志层 → 系统文件层的顺序逐级往下查。
服务层:wscsvc 与 WinDefend 状态
Get-Service wscsvc作用:检查 WSC 服务状态。WSC 是禁用命令的执行通道,这个服务异常时,命令会表现得像执行成功了,防护状态却纹丝不动。
同时核对WinDefend宿主服务状态是否与预期一致——关闭防护不等于停掉宿主服务,两者是两回事。
日志层:读 Defender 运行事件
Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational" -MaxEvents 10作用:读取最近的 Defender 运行事件,判断是被策略拦截还是组件本身异常。
系统文件层:完整性修复
若怀疑系统文件损坏,再做完整性修复:
sfc /scannow作用:扫描并修复系统文件。
DISM /Online /Cleanup-Image /RestoreHealth作用:修复系统映像,排除底层文件损坏导致的开关失灵。
常见现象速查
下表按"你看到什么"整理了对应的排查入口:
| 遇到什么情况 | 先查什么命令 | 对应解法 |
|---|---|---|
| 关掉了,重启后又恢复 | 重启后重跑Get-MpComputerStatus | 核对可执行文件与自启动项是否仍在生效,参考跨重启场景 |
| 界面显示"由组织管理" | 与基线记录比对 | 组策略 / 注册表被外部工具改动过,--disable后还原 |
| 安全中心界面空白、灰色 | Get-Service wscsvc | 安全中心相关组件异常,先处理组件问题 |
| 扫描或实时保护不可用 | Get-MpComputerStatus | 核对 Defender 实时保护或引擎状态,处理后重新验证 |
用完之后的安全守则
- 用完尽快执行
--disable恢复防护,别让系统长时间失去实时保护。 - 可执行文件在确认不再需要禁用前别删,持久化依赖自启动项,删文件会让禁用失效。
- 把关键验证命令的输出存档,方便下次对比。
- 同一时间不要让多个"在场杀毒"声明并存,避免策略互相打架。
- 生产环境关闭防护前先评估风险,隔离 / 测试环境可以放宽。
高频问题
Q:刚关掉了,重启后 Defender 又回来了,是哪里出了问题?A:持久化靠的是自启动项。文件被删掉、或者自启动项失效,重启后系统就会自行恢复。先确认文件还在磁盘上、自启动项生效,然后重启再验证一次状态。
Q:如何确认 Defender 和 Windows 防火墙都真的关掉了?A:用Get-MpComputerStatus看实时保护,用Get-NetFirewallProfile看防火墙开关,再翻一遍 Defender 运行日志,三处状态一致才算关闭彻底。
Q:测试做完之后必须还原吗?A:必须。除了隔离 / 测试环境,建议尽快执行no-defender-loader --disable把实时保护找回来。
哪些环境该用,哪些不该用
隔离 / 测试环境、需要验证防护开关的行为时,是 no-defender 的合适场景;生产环境则先评估风险再决定是否关防护。不管哪种环境,节奏都应该是:先记录基线,再按需操作,用完执行--disable还原,最后用交叉验证确认系统回到了受保护状态。
【免费下载链接】no-defenderA slightly more fun way to disable windows defender + firewall. (through the WSC api)项目地址: https://gitcode.com/GitHub_Trending/no/no-defender
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考