我正在尝试创建一个10个字符的密码,其中包含数字,字母(大写和小写)以及符号的混合。
以下是我在函数中使用的脚本:
$ascii[26]
}
如果我删除以下部分:
| Where-Object {$ _ -notin“'”,'`','|','_',“;”,'“',','}
密码的创建工作正常,尽管包括我不想包含的符号。
使用Where-Object函数会使Get-Random函数仅使用数组中的前5个字符,因此我不会获得任何案例类型,数字或任何其他符号的字母。 / p>
我发现如果我使用[int[]][char[]]
(是数组中的第25个字符),我会得到一个空值,但我认为这会允许使用任何符合此字符的字符,或者没有根本不是第5个。第25个角色恰好是一个; (ascii值59)。我尝试将符号添加到Where-Object排除项中,并将其从数组中删除,但第25个字符仍显示为空值。
我对每个字符的ascii值$ascii.Count
执行了反向查找;符号会出现,它返回值58和60,让我相信这是冒犯的值59,但此时的符号应该被排除在外。
在'where-object'排除列表中添加字符应该是从数组中删除它们,但是看起来如果正在运行{{1}}显示49个字符,无论我是否添加或删除字符到Where-对象排除列表。
我在网上寻找信息似乎找不到任何信息,虽然它可能是我正在使用的搜索字词,因为这是一个复杂的案例,并没有多少报道。
感谢任何帮助。
答案 0 :(得分:1)
短版(对我来说最好的方法):
$possible=36..38 + 40..43 + 45..58 + 60..94 + 97..123 + 125..126 + 33
(get-random -count 10 -input $possible | % {[char]$_}) -join ''
答案 1 :(得分:1)
我没有写这个,我不记得我在哪里得到它,但我已经将其构建到任何脚本中以创建随机安全的Windows密码,您可以指定参数{{1}返回的密码的长度(我已将它设置为10)。
[int]$PasswordLength
EDIT :::
https://gallery.technet.microsoft.com/scriptcenter/Generate-a-random-and-5c879ed5
可在此处找到该脚本。
答案 2 :(得分:0)
尝试这样的事情:
Function random-password ($length = 10)
{
$possible=36..38 + 40..43 + 45..58 + 60..94 + 97..123 + 125..126 + 33
$password = get-random -count $length -input $possible |
% -begin { $aa = $null } -process {$aa += [char]$_} -end {$aa}
return $password
}
random-password
答案 3 :(得分:0)
使用以下脚本似乎完全符合我的要求。
我在此行的+ =之后删除了逗号(,):
$ascii = $NULL;For ($a = 33;$a –le 126;$a++) {$ascii +=, ([char][byte]$a | Where-Object {$_ -notin "'",'`','|','_',";",'"',','})}
我在将数组添加到以下内容之前创建了一个空数组:
$ascii = @()
完整的代码块如下:
Function Get-TempPassword {
$TempPassword = $null
$ascii = @()
For ($a = 33;$a –le 126; $a++) { $ascii += ([char][byte]$a | Where-Object { $_ -notin "'",'`','|','_',";",'"',',' }) }
Do {$TempPassword += $ascii | Get-Random; $loop++}
Until ($loop -eq 11)
return $TempPassword
}
答案 4 :(得分:0)
我已经纠正了我的其他命题,但我提出了另一种方法:)
Function random-password2 ($length = 10)
{
$Assembly = Add-Type -AssemblyName System.Web
$password = [System.Web.Security.Membership]::GeneratePassword(50, 2)
$possible=36..38 + 40..43 + 45..58 + 60..94 + 97..123 + 125..126 + 33
$newchar=[char](get-random -count 1 -input $possible)
$password=$password -replace "[`'|_;,]", $newchar
$password.Substring(0, $length)
}
random-password2
答案 5 :(得分:0)
递归方法:
package.json