首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure-CLI/Powershell密码要求

Azure-CLI/Powershell密码要求
EN

Stack Overflow用户
提问于 2018-10-16 13:59:35
回答 2查看 443关注 0票数 0

因此,我试图使一个变量与在azure中生成虚拟机的密码要求相匹配。

要做到这一点,它必须有以下三个!大写,一个小写一个特殊字符或数字

这是我要修改的主要代码。

代码语言:javascript
复制
$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)"

这是我修改的代码,但不能正常工作。

代码语言:javascript
复制
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小写等等,我也想有特殊的字符,但#注释所有的代码如下

感谢您提前阅读并发布您的文章!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-16 15:21:41

我不确定是否只需要一次审判就能完成这件事。作为替代,下面有一个小助手函数来做测试。

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2018-10-16 15:51:03

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

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

代码语言:javascript
复制
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"

测试结果如下:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52837260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档