powershell不能直接修改本地安全策略,需通过注册表操作或安全模板(.inf)配合secedit实现;关键密码策略对应注册表路径及值已明确,修改后须gpupdate /force刷新生效。
powershell 本身不能直接修改“本地安全策略”(如 secpol.msc 中的密码策略),因为这些策略由 本地组策略对象(lgpo) 管理,存储在注册表和安全模板中,需通过 secedit、set-itemproperty(注册表路径)或 invoke-gpupdate 配合安全模板(.inf)等方式实现。但 powershell 可以自动化整个流程。
确认目标策略项及对应注册表/SECEDIT路径
Windows 本地密码复杂度相关策略主要位于:
账户策略 → 密码策略,关键项包括:
-
密码必须符合复杂性要求 → 注册表路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\PasswordComplexity(DWORD,1=启用,0=禁用) -
密码长度最小值 → 注册表路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MinimumPasswordLength(DWORD,值为数字) -
密码最长使用期限 → 注册表路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MaximumPasswordAge(DWORD,单位:天,0=永不过期)
注意:直接改注册表后需重启或运行 gpupdate /force 生效,且部分策略(如密码历史)仅在域环境或通过安全模板完整应用才可靠生效。
方法一:用 PowerShell 修改注册表并刷新策略
适用于快速启用/禁用复杂度、调整最小长度等简单变更:
# 以管理员身份运行 # 启用密码复杂度要求 Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "PasswordComplexity" -Value 1 -Type DWord <h1>设置最小密码长度为8</h1><p>Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "MinimumPasswordLength" -Value 8 -Type DWord</p><h1>设置密码最长使用期限为90天(单位:秒,90*86400 = 7776000)</h1><p>Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "MaximumPasswordAge" -Value 7776000 -Type DWord</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/shouce/1785" title="Shell脚本编写基础 中文WORD版"><img src="https://img.php.cn/upload/manual/000/000/016/170693311554316.png" alt="Shell脚本编写基础 中文WORD版" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/shouce/1785" title="Shell脚本编写基础 中文WORD版" class="overflowclass">Shell脚本编写基础 中文WORD版</a> <p class="overflowclass">Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统</p> </div> <a rel="nofollow" href="/xiazai/shouce/1785" title="Shell脚本编写基础 中文WORD版" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div><h1>刷新组策略(立即生效)</h1><p>gpupdate /force </p>
方法二:用 PowerShell 生成并导入安全模板(推荐用于生产环境)
更规范、可审计、支持更多策略项(如密码历史、锁定阈值等)。步骤如下:
- 先用
secedit /export /cfg baseline.inf导出现有配置作参考 - 用 PowerShell 编辑 .inf 文件(文本操作),重点修改
[System Access]区段 - 例如设置:
PasswordComplexity = 1、MinimumPasswordLength = 8、MaximumPasswordAge = 90 - 再执行:
secedit /configure /db secedit.sdb /cfg "C:\path\to\policy.inf" /quiet
PowerShell 脚本示例(生成并应用):
$infContent = @" [Version] signature="$Windows NT$" <p>[System Access] PasswordComplexity = 1 MinimumPasswordLength = 8 MaximumPasswordAge = 90 MinimumPasswordAge = 1 PasswordHistorySize = 24 LockoutBadCount = 5 ResetLockoutCount = 30 LockoutDuration = 30 "@</p><p>$infPath = "$env:TEMP\password_policy.inf" $infContent | Out-File -FilePath $infPath -Encoding ASCII</p><p>secedit /configure /db secedit.sdb /cfg $infPath /quiet gpupdate /force </p>
注意事项与验证
执行前务必确认:
- 脚本必须以管理员权限运行(右键 PowerShell → “以管理员身份运行”)
- 修改后建议用
secedit /export /cfg check.inf导出并比对,或打开gpedit.msc手动查看“计算机配置 → Windows 设置 → 安全设置 → 账户策略 → 密码策略”是否更新 - 某些策略(如密码复杂度)在下次用户更改密码时才强制生效,已有弱密码不会被立即拒绝
- 域环境请优先使用组策略(GPO),本地策略仅对工作组有效
不复杂但容易忽略。










