Azure-CLI / Powershell Требования к паролю - PullRequest
0 голосов
/ 16 октября 2018

Поэтому я пытаюсь сделать так, чтобы переменная соответствовала требованиям к паролю для создания виртуальной машины в 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 строчных буквы и т. д., и я также хочу иметь специальные символы, но # комментирует всекод, который следует like this

Заранее благодарим за то, что прочитали это и опубликовали свой ответ !!!

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Для специальных символов регулярное выражение должно быть таким, как в приведенном ниже коде.

Вам необходимо использовать одинарную кавычку для регулярного выражения:

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"

Результат теста, как показано ниже: enter image description here

0 голосов
/ 16 октября 2018

Я не уверен, что это можно сделать с помощью одного регулярного выражения. В качестве альтернативы, ниже небольшой вспомогательной функции для выполнения тестов.

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)
...