private/get-randomPassword.ps1
function get-randomPassword { [CmdletBinding()] param ( [Parameter()] [ValidateRange(6,128)] [Int] $PasswordLength = 14, [switch] $forceComplex ) BEGIN { [char[]]$Exclusions = 'vwuOmnil1-.,%' } PROCESS{ $GeneratedCharacters = @{ Uppercase = (97..122) | get-random -count 32 | where-object {$Exclusions -notContains $_} | foreach-object {[Char]$_} Lowercase = (65..90) | get-random -count 128 | where-object {$Exclusions -notContains $_} | foreach-object {[Char]$_} Numeric = (48..57) | get-random -count 16 | where-object {$Exclusions -notContains $_} | foreach-object {[Char]$_} SpecialChar = [Char[]]('!!@#$%&*()=?}][{') | get-random -count 4 | where-object {$Exclusions -notContains $_} | foreach-object {[Char]$_} } $StringSet = $GeneratedCharacters.Uppercase + $GeneratedCharacters.Lowercase + $GeneratedCharacters.Numeric + $GeneratedCharacters.SpecialChar $Complexity = get-random -count 1 -inputObject $GeneratedCharacters.Lowercase $Complexity += get-random -count 1 -inputObject $GeneratedCharacters.Uppercase $Complexity += get-random -count 1 -inputObject $GeneratedCharacters.Numeric $Complexity += get-random -count 1 -inputObject $GeneratedCharacters.SpecialChar $generatedPassword = -join(get-random -count ($passwordLength-4) -InputObject $StringSet) $($generatedPassword + $Complexity) | sort-object {get-random} } } |