【问题标题】:Azure-CLI/Powershell Password requirmentsAzure-CLI/Powershell 密码要求
【发布时间】:2018-10-16 13:59:35
【问题描述】:

所以我试图使变量与在 azure CLI 中创建虚拟机的密码要求相匹配

要做到这一点,它必须具有以下 3 个!大写字母、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 个小写的等等 我也想要特殊字符 但是 # cmets 后面的所有代码

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

【问题讨论】:

  • 添加了正则表达式标签。

标签: regex azure powershell azure-cli azure-cli2


【解决方案1】:

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

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)

【讨论】:

  • 感谢西奥的回答!我在问题中唯一忘记提到的是,它需要最少 12 个字符,最多 24 个字符。您也许还知道如何获得最大值?
  • @Brynn 我也更新了测试密码长度在 12 到 24(含)之间的答案。干杯。
  • 非常感谢西奥!现在我希望我能投票两次!感谢您为此付出的时间和精力,希望您今天过得愉快!
  • @Brynn。我忘了更改要求的数量。现在应该是[int]$Requirements = 5,因为我们添加了一个新测试。对不起..
  • 嗯,它很容易适应,但是,如果你为此发布一个新问题而不是扩展这个问题会更好。这样您就可以定义您的确切要求,例如最小/最大长度、是否有特殊字符等。
【解决方案2】:

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

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

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"

测试结果如下:

【讨论】:

  • 但这不允许AaBbCc1!2@3# 或超过最少必需字符的密码
  • 嘿伊万谢谢你的回答!不幸的是,我忘了提到这是它需要的最少字符,而且无论如何我可以有超过 12 个字符,这是一个赞成票,因为你的答案也是正确的!再次非常感谢您的回答!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 2013-07-29
  • 2020-12-28
相关资源
最近更新 更多