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

如何在PowerShell密码生成器中仅允许指定特殊字符?

自定义特殊字符的PowerShell强密码生成函数修改

原函数依赖System.Web.Security.Membership::GeneratePassword生成密码,但该方法无法限制特殊字符范围。下面是修改后的函数,仅允许使用*^!+~这类特殊字符,同时保留原有的强密码复杂度要求(包含大小写字母、数字、特殊字符):

Function GenerateStrongPassword ([Parameter(Mandatory=$true)][int]$PasswordLength)
{
    # 定义允许的字符集
    $upperCase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    $lowerCase = 'abcdefghijklmnopqrstuvwxyz'
    $digits = '0123456789'
    $specialChars = '*^!+~'
    $allChars = $upperCase + $lowerCase + $digits + $specialChars

    $PassComplexCheck = $false
    do {
        # 初始化密码数组,确保至少包含每类字符各一个
        $password = @()
        $password += $upperCase[(Get-Random -Maximum $upperCase.Length)]
        $password += $lowerCase[(Get-Random -Maximum $lowerCase.Length)]
        $password += $digits[(Get-Random -Maximum $digits.Length)]
        $password += $specialChars[(Get-Random -Maximum $specialChars.Length)]

        # 填充剩余长度的随机字符
        for ($i = 4; $i -lt $PasswordLength; $i++) {
            $password += $allChars[(Get-Random -Maximum $allChars.Length)]
        }

        # 打乱密码顺序并转为字符串
        $newPassword = ($password | Get-Random -Count $password.Length) -join ''

        # 验证密码仅包含允许的字符(额外保险)
        if ($newPassword -notmatch "[^$([regex]::Escape($allChars))]") {
            $PassComplexCheck = $true
        }
    } While ($PassComplexCheck -eq $false)

    return $newPassword
}

# 示例:生成16位密码
GenerateStrongPassword -PasswordLength 16

修改说明:

  • 移除了对System.Web程序集的依赖,改用自定义字符集严格控制允许使用的字符
  • 明确指定特殊字符集合为*^!+~,所有特殊字符均从该集合选取
  • 初始化密码时先确保包含四类字符(大写、小写、数字、指定特殊字符),再填充剩余长度的随机字符,最后打乱顺序保证随机性
  • 增加额外验证步骤,确保密码仅包含允许的字符,避免意外生成不符合要求的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 07:54:23