至于建议的jisaak,没有100%保证Membership.GeneratePassword Method生成的密码符合AD complexity requirements。
这就是为什么我重新发明轮子:
Function MakeUp-String([Int]$Size = 8, [Char[]]$CharSets = "ULNS", [Char[]]$Exclude) {
$Chars = @(); $TokenSet = @()
If (!$TokenSets) {$Global:TokenSets = @{
U = [Char[]]'ABCDEFGHIJKLMNOPQRSTUVWXYZ' #Upper case
L = [Char[]]'abcdefghijklmnopqrstuvwxyz' #Lower case
N = [Char[]]'' #Numerals
S = [Char[]]'!"#$%&''()*+,-./:;<=>[email protected][\]^_`{|}~' #Symbols
}}
$CharSets | ForEach {
$Tokens = $TokenSets."$_" | ForEach {If ($Exclude -cNotContains $_) {$_}}
If ($Tokens) {
$TokensSet += $Tokens
If ($_ -cle [Char]"Z") {$Chars += $Tokens | Get-Random} #Character sets defined in upper case are mandatory
}
}
While ($Chars.Count -lt $Size) {$Chars += $TokensSet | Get-Random}
($Chars | Sort-Object {Get-Random}) -Join "" #Mix the (mandatory) characters and output string
}; Set-Alias Create-Password MakeUp-String -Description "Generate a random string (password)"
用法:
- 的
Size
参数定义密码的长度。
- 的
CharSets
参数定义的复杂性,其中的人物U
, L
,N
和S
代表大写,小写,数字和符号。 如果用小写(u
,l
,n
或s
)返回的字符串 威力包含有关字符集的任何字符的供应,如果在大写(U
,L
,N
或S
)返回的字符串提供 会 至少包含有关字符 集中的一个字符。
Exclude
参数允许您排除可能会出现的特定字符 导致混淆,如字母数字O
和数字0
(零)。
实例:
要创建的8个字符的长度可能包含任何大写字符,小写字符和数字的口令:
Create-Password 8 uln
要与长度创建密码包含至少一个大写字符,一个小写字符,一个数字和一个符号且不包含字符的12个字符OLIoli01:
Create-Password 12 ULNS "OLIoli01"
有关最新版本Create-Password
,请参阅:https://powersnippets.com/create-password/
完美!谢谢。 – haze1434
'[System.Web.Security]'不在我的机器上。我该怎么办?此外,“LoadWithPartialName”已弃用。使用'[System.Reflection.Assembly] :: Load()'而不是 –