ADUserManagement.psm1
#Generate password using a specific number of words and numbers function Get-XKCDPassword { Param( [int]$words = 2, [string]$delimiter = "", [ValidateSet("en","de")] [string]$lang = "en", [switch]$FirstLetterUpperCase=$true ) [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $password = "" $wordlist = @{ de = "https://janikvonrotz.ch/wp-content/uploads/2017/08/wordlist.de_.txt" en = "https://janikvonrotz.ch/wp-content/uploads/2017/08/wordlist.en_.txt" } switch($words) { {$_ -ge 6 } { throw "Word parameter cannot be greater or equal 6." } 5 { $range = (3,4) } 4 { $range = (4,5) } 3 { $range = (5,6) } 2 { $range = (7,8) } {$_ -le 1 } { throw "Word parameter cannot be less or equal 1." } } $list = (((Invoke-WebRequest $wordlist[$lang]).Content -split "`n" | ForEach-Object{ New-Object PSObject -Property @{ Value = $_.ToLower() Length=$_.length } }) | Where-Object { ($_.Length -eq ($range[0] + 1)) -or ($_.Length -eq ($range[1] + 1)) }) 1..$words | ForEach-Object { $part = (Get-Random $list).Value.Trim() if($FirstLetterUpperCase ) { $password += ((Get-Culture).TextInfo).ToTitleCase($part) } else { $password += $part } if($_ -lt $words){ $password += $delimiter } } $password = $password + (get-random -Maximum 99 -Minimum 1) return $password } |