You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PowerShell脚本校验密码符合AD默认域密码策略

用PowerShell结合AD默认密码策略校验密码合规性

核心思路

先通过Get-ADDefaultDomainPasswordPolicy获取域的默认密码策略,再根据策略中的参数(最小长度、复杂度开关、字符要求等)编写校验逻辑,完全避免硬编码规则,适配域策略的动态更新。

实现代码

下面是一个可复用的校验函数,直接传入密码和策略即可完成合规性检查:

function Test-ADPasswordCompliance {
    param(
        [Parameter(Mandatory=$true)]
        [string]$Password,
        [Parameter(Mandatory=$true)]
        [Microsoft.ActiveDirectory.Management.ADDomainPasswordPolicy]$PasswordPolicy,
        [string]$Username # 可选参数,用于检查密码是否包含用户名(AD复杂度规则默认要求)
    )

    # 1. 校验密码最小长度
    if ($Password.Length -lt $PasswordPolicy.MinPasswordLength) {
        Write-Warning "密码长度不足,域策略要求至少 $($PasswordPolicy.MinPasswordLength) 个字符"
        return $false
    }

    # 2. 校验复杂度要求(仅当策略启用复杂度时执行)
    if ($PasswordPolicy.ComplexityEnabled) {
        $charTypeCount = 0
        # 检查是否包含大写字母
        if ($Password -cmatch '[A-Z]') { $charTypeCount++ }
        # 检查是否包含小写字母
        if ($Password -cmatch '[a-z]') { $charTypeCount++ }
        # 检查是否包含数字
        if ($Password -cmatch '[0-9]') { $charTypeCount++ }
        # 检查是否包含特殊字符(AD定义的非字母数字字符)
        if ($Password -cmatch '[^a-zA-Z0-9]') { $charTypeCount++ }

        # AD复杂度要求至少3种字符类型
        if ($charTypeCount -lt 3) {
            Write-Warning "密码不符合复杂度要求,需至少包含以下3种字符类型:大写字母、小写字母、数字、特殊字符"
            return $false
        }

        # 检查密码是否包含用户名(AD默认规则)
        if ($Username -and $Password -like "*$Username*") {
            Write-Warning "密码不能包含用户名"
            return $false
        }
    }

    # 所有校验项通过
    return $true
}

使用示例

  1. 先获取域默认密码策略:
$domainPasswordPolicy = Get-ADDefaultDomainPasswordPolicy
  1. 校验目标密码并执行用户创建逻辑:
$newUsername = "jane.doe"
$newPassword = "Banana456!"

if (Test-ADPasswordCompliance -Password $newPassword -PasswordPolicy $domainPasswordPolicy -Username $newUsername) {
    Write-Host "密码符合策略,开始创建用户..."
    # 执行AD用户创建代码
    New-ADUser -Name "Jane Doe" `
               -SamAccountName $newUsername `
               -UserPrincipalName "$newUsername@yourdomain.com" `
               -AccountPassword (ConvertTo-SecureString $newPassword -AsPlainText -Force) `
               -Enabled $true `
               -Path "OU=Users,DC=yourdomain,DC=com"
} else {
    Write-Host "密码不符合域策略,终止用户创建"
}

补充说明

  • 函数完全贴合AD默认密码策略的规则,策略更新后无需修改脚本,自动适配新要求。
  • 如果你的环境使用精细密码策略(而非默认域策略),只需将Get-ADDefaultDomainPasswordPolicy替换为Get-ADFineGrainedPasswordPolicy,校验逻辑保持不变。

内容的提问来源于stack exchange,提问作者Escambray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:57:16