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"
测试结果如下:
所以我试图让一个变量匹配在 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"
测试结果如下: