至於建議的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()'而不是 –