-
Notifications
You must be signed in to change notification settings - Fork 19
Open
Labels
Description
function New-RandomPassword {
# Creadit to https://arminreiter.com/2021/07/3-ways-to-generate-passwords-in-powershell/
param (
[Parameter(Mandatory)]
[ValidateRange(4,[int]::MaxValue)]
[int] $PasswordLength,
[int] $upper = 1,
[int] $lower = 1,
[int] $numeric = 1,
[int] $special = 1
)
if($upper + $lower + $numeric + $special -gt $PasswordLength) {
throw "number of upper/lower/numeric/special char must be lower or equal to length"
}
$PasswordAllowedUpperCharacters = if (-not([string]::IsNullOrEmpty($env:PasswordAllowedUpperCharacters))) { $env:PasswordAllowedUpperCharacters } else { "ABCDEFGHIJKLMNOPQRSTUVWXYZ" }
$PasswordAllowedLowerCharacters = if (-not([string]::IsNullOrEmpty($env:PasswordAllowedLowerCharacters))) { $env:PasswordAllowedLowerCharacters } else { "abcdefghijklmnopqrstuvwxyz" }
$PasswordAllowedNumberCharacters = if (-not([string]::IsNullOrEmpty($env:PasswordAllowedNumberCharacters))) { $env:PasswordAllowedNumberCharacters } else { "123456789" }
$PasswordAllowedSpecialCharacters = if (-not([string]::IsNullOrEmpty($env:PasswordAllowedSpecialCharacters))) { $env:PasswordAllowedSpecialCharacters } else { ".:;,-_!?$%*=+&<>@#()" }
$charSet = ""
if($upper -gt 0) { $charSet += $PasswordAllowedUpperCharacters }
if($lower -gt 0) { $charSet += $PasswordAllowedLowerCharacters }
if($numeric -gt 0) { $charSet += $PasswordAllowedNumberCharacters }
if($special -gt 0) { $charSet += $PasswordAllowedSpecialCharacters }
$charSet = $charSet.ToCharArray()
$rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$bytes = New-Object byte[]($PasswordLength)
$rng.GetBytes($bytes)
$result = New-Object char[]($PasswordLength)
for ($i = 0 ; $i -lt $PasswordLength ; $i++) {
$result[$i] = $charSet[$bytes[$i] % $charSet.Length]
}
$password = (-join $result)
$valid = $true
if($upper -gt ($password.ToCharArray() | Where-Object {$_ -cin $PasswordAllowedUpperCharacters.ToCharArray() }).Count) { $valid = $false }
if($lower -gt ($password.ToCharArray() | Where-Object {$_ -cin $PasswordAllowedLowerCharacters.ToCharArray() }).Count) { $valid = $false }
if($numeric -gt ($password.ToCharArray() | Where-Object {$_ -cin $PasswordAllowedNumberCharacters.ToCharArray() }).Count) { $valid = $false }
if($special -gt ($password.ToCharArray() | Where-Object {$_ -cin $PasswordAllowedSpecialCharacters.ToCharArray() }).Count) { $valid = $false }
if(!$valid) {
$password = New-RandomPassword $PasswordLength $upper $lower $numeric $special
}
return $password
}
Reactions are currently unavailable