Azure-CLI/Powershell 密码要求

Azure-CLI/Powershell Password requirments

所以我试图让一个变量匹配在 azure CLI 中制作虚拟机的密码要求

要执行此操作,它必须具有以下 3 个 !uppercase、1 个小写字母、1 个特殊字符或数字

这是我要更改的主要代码

$AdminPassword = Read-Host -Prompt "Please insert a Admin Password (Password must have 3 of the following: 1 lower case character, 1 upper case character, 1 number and 1 special character)"

这是我更改的代码,但无法正常工作

do 
    {
        $AdminPassword = Read-Host -Prompt "Please insert a Admin Password (Password must have the 3 of the following: 1 lower case character, 1 upper case character, 1 number and 1 special character)"
    }
    until($AdminPassword -Like "[A-Z][A-Z][A-Z][a-z][a-z][a-z][0-9][0-9][0-9][!@$#$%^&*()_+\-=\[\]{};'':"\|,.<>\/? ][!@$#$%^&*()_+\-=\[\]{};'':"\|,.<>\/? ][!@$#$%^&*()_+\-=\[\]{};'':"\|,.<>\/? ]")
    Write Match

写匹配行我知道什么时候成功

我在这里遇到的真正麻烦是我想要所有 4 个要求 3 次所以 3 个大写的 3 个小写的等等 我也想有特殊字符 但是 # 注释了

之后的所有代码

提前感谢您阅读本文并发布您的答案!!!

我不确定这是否可以只用一个正则表达式来完成.. 作为替代方案,下面是一个小的辅助函数来进行测试。

function Test-AdminPassword {
    [CmdletBinding()]
    Param(
        [Parameter(Position = 0, Mandatory=$true)]
        [string]$Password,

        [Parameter(Position = 1)]
        [int]$Requirements = 5
    )
    $result = 0

    # test length between 12 and 24
    if ($Password.Length -in 12..24) {
        $result++
    }
    # test uppercase
    if (($Password -creplace '[^A-Z]', '').Length -ge 3) {
        $result++
    }
    # test lowercase
    if (($Password -creplace '[^a-z]', '').Length -ge 3) {
        $result++
    }
    # test digits
    if (($Password -replace '[^0-9]', '').Length -ge 3) {
        $result++
    }
    # test special characters
    if (($Password -creplace '[^!@$#%^&*()_+\-=\[\]{};'':"\|,.<>\/? ]', '').Length -ge 3) {
        $result++
    }

    # return $true if the password complies with at least $requirements
    return ($result -ge $Requirements)
}

do {
    $AdminPassword = Read-Host -Prompt "Please insert an Admin Password (must have the 3 lower case characters, 3 upper case characters, 3 digits and 3 special characters)"
} until (Test-AdminPassword $AdminPassword)

对于特殊字符,正则表达式应该是下面代码中的正则表达式。

您的正则表达式需要使用单引号:

do
{
$s=Read-Host -Prompt "please enter a password"
}
until($s -like '[A-Z][A-Z][A-Z][a-z][a-z][a-z][0-9][0-9][0-9][!@$#$%^&*()_+\-\=`[`]{};'':`"\|,.<>\/? ][!@$#$%^&*()_+\-\=`[`]{};'':`"\|,.<>\/? ][!@$#$%^&*()_+\-\=`[`]{};'':`"\|,.<>\/? ]')

write-host "complete entering password"

测试结果如下: