Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排除Powershell密码生成器中的特定单词_Powershell - Fatal编程技术网

排除Powershell密码生成器中的特定单词

排除Powershell密码生成器中的特定单词,powershell,Powershell,我创建了一个脚本来创建随机密码,其格式与Microsoft在O365中重置密码时使用的格式相同。如果随机生成的密码包含任何可能会冒犯的指定值,那么我希望脚本忽略它们并重新运行循环 我尝试使用-contains和-like语句,但输出仍然包含其中一些值 write-host "Enter number of passwords you require generating" - ForegroundColor Green $Run = read-host foreach($i in 1..$Ru

我创建了一个脚本来创建随机密码,其格式与Microsoft在O365中重置密码时使用的格式相同。如果随机生成的密码包含任何可能会冒犯的指定值,那么我希望脚本忽略它们并重新运行循环

我尝试使用-contains和-like语句,但输出仍然包含其中一些值

write-host "Enter number of passwords you require generating" - 
ForegroundColor Green
$Run = read-host
foreach($i in 1..$Run)
 {
    If($i=$Run){                           
    $result = ""
    $set1 = "bcdfghjklmnpqrstvwxyz".ToCharArray()
    $set2 = "aeiou".ToCharArray()
    $result += $set1 | Get-Random
    $result += $set2 | Get-Random
    $result += $set1 | Get-Random

$DisabledPass=$result.Substring(0,1).ToUpper(1)+$result.Substring(1,2)+(Get-Random -Minimum 10000 -Maximum 99999)

$valuesToLookFor = @(
'*Sex*',
'*Bum*',
'*Cow*',
'*Fuc*',
'*Wog*',
'*Cum*',
'*God*',
'*Gob*',
'*Fuk*')

if ($DisabledPass -contains $valuesToLookFor) {continue}
$disabledpass |Out-File c:\admin\passwords.csv -Append
Write-Host "$DisabledPass" -ForegroundColor Green
}
 }
脚本成功运行,但输出中包含的密码包含我要忽略的值。

类似以下内容:

$set1 = "bcdfghjklmnpqrstvwxyz".ToCharArray()
$set2 = "aeiou".ToCharArray()
$badWords = "(Sex|Bum|Cow|Fuc|Wog|Cum|God|Gob|Fuk)"

$count = Read-Host -Prompt "Enter number of passwords you require generating"

1..$count | ForEach-Object {
    do
    {
        $result = ""
        $result += $set1 | Get-Random
        $result += $set2 | Get-Random
        $result += $set1 | Get-Random

        $password = (Get-Culture).TextInfo.ToTitleCase($result) + (Get-Random -Minimum 10000 -Maximum 99999)
    } while ($password -match $badWords)

    Write-Host "Generated password: $password" -ForegroundColor Green
}

试试
$valuesToLookFor='Sex | Bum | Cow | Fuc | Wog | Cum | Gob | Fuk';如果($DisabledPass-match$valuestolookfore){continue}
我发现了一种很好的方法,可以避免在计算机上检测到粗话。。。[咧嘴笑]。此外,我放弃了生成自己的密码,而是使用DinoPass API:)不确定这是否是您打算使用的最后一种方式,但您将其设置为使用
continue
跳过“坏”密码的方式意味着您不会得到所需数量的密码(如果其中有禁止的单词)。您可能希望使用不同的技术,例如记录生成的“良好”密码的数量,并仅在达到所需数量时停止。DinoPass万岁。。。。。我喜欢把它分发给成年人,他们的API允许我制作一个很容易调用的小型cmdlet。从set1中删除“x”,从set2中删除“o”+“u”,所有这些都完成了。无论如何,在使用正则表达式时,稍微短一点
$badWords=“(Sex |[BC]um | Cow | Fu[ck]| Wog | Go[bd])”