首页/安全/安全加固速查/PowerShell 2.0 引擎禁用
主机加固基线90 条

PowerShell 2.0 引擎禁用

PS2 引擎不产生 ScriptBlock 日志且可被降级调用绕过检测;禁用“Windows PowerShell 2.0 引擎”是现代 Windows 基线的必做项。

安全加固速查安全更新于 2026-10-13

为什么要禁 PowerShell 2.0

Windows 自带的 PowerShell 2.0 引擎缺少现代版本的安全与审计能力:它的执行不产生 ScriptBlock 日志,攻击者用 powershell -version 2 就能降级调用,绕过大部分基于日志的检测。微软已在现代基线中把它列为应移除的组件。

基本信息

适用平台Windows 10 1803+ / Windows Server 2012 R2+(含更高版本)
功能名称MicrosoftWindowsPowerShellV2 与 MicrosoftWindowsPowerShellV2Root
生效方式禁用后需重启
基线两项功能 State 均为 Disabled

典型使用场景

  • 新建服务器与镜像模板:在模板阶段就移除,避免逐台补做
  • 安全加固整改:CIS 与微软基线的常见条目,属于易落地项
  • 检测能力提升:禁用后脚本活动统一走现代引擎日志,被绕过概率下降
  • 迁移评估:确认老脚本是否依赖 -version 2,再决定禁用节奏

核查与禁用

核查与禁用
# 查看两项功能状态(部分版本只暴露其中一个)
Get-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2 -ErrorAction SilentlyContinue | Select-Object FeatureName, State
Get-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2Root -ErrorAction SilentlyContinue | Select-Object FeatureName, State
# 禁用(不自动重启,便于安排窗口)
Disable-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2Root -NoRestart
# 重启后复核
Get-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2Root | Select-Object State

功能名称对照

功能名含义处理建议
MicrosoftWindowsPowerShellV2传统可选功能列表中的 PS2 引擎项部分版本存在,需与 V2Root 一起核查
MicrosoftWindowsPowerShellV2RootDISM 列表中的 PS2 根功能主改对象,禁用后重启生效
Windows PowerShell 5.1现代默认引擎保留,日常运维依赖它
PowerShell 7+独立安装的新一代按需,不受本项影响
依赖 powershell -version 2 的老脚本与部分安装程序会直接失败:先盘点脚本引用,迁移到 PowerShell 7 或改写后再禁用。

批量核查思路

批量核查思路
# 远程批量核查:逐台读取功能状态,挑出仍为 Enabled 的机器
$hosts = Get-Content .\hosts.txt
foreach ($h in $hosts) {
  # 用 Invoke-Command 在目标机上执行,避免本地误读
  Invoke-Command -ComputerName $h -ScriptBlock {
    Get-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2Root | Select-Object FeatureName, State
  } | Select-Object PSComputerName, FeatureName, State
}
禁用是重启后生效:验收要么重启后复核功能状态,要么在报告中注明生效时点,直接用命令回显当作已生效是不严谨的。
移除组件前确认备份软件与监控 agent 的脚本:部分老版本采集脚本显式调用 v2 引擎,移除后任务会静默失败,往往几天后才被业务发现。变更前建议把这类脚本清单同步给值班团队。

易错点

  • 只改了 V2 忘了 V2Root:不同版本暴露的功能名不同,两个都要看
  • 把「命令执行成功」当作已生效:未重启前 PS2 仍可调用,验收口径要写清
  • 评估遗漏安装包与软件自带脚本:装机后发现安装器失败,回滚成本高
  • 用第三方模块替代核查:优先用系统自带 DISM/PowerShell 命令,结果更权威

数据来源与参考

  • Microsoft 安全基线:PowerShell 2.0 禁用
  • MITRE ATT&CK:PowerShell 滥用(T1059.001)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌