Public/Core/Get-RandomPassword.ps1

<#
.SYNOPSIS
Create a random password given a length
 
.DESCRIPTION
Create a random password given a length. Default length is 10.
 
.PARAMETER passwordLength
Integer with the password length between 1 & 256
 
.EXAMPLE
Get-RandomPassword -PasswordLength 8
 
.NOTES
   Created by: Sam Cattanach
   Modified: 2025-01-27 9:33 AM CST
#>

function Get-RandomPassword() {
    [cmdletbinding()]
    Param(
        [Parameter(ValueFromPipeline=$false)]
        [ValidateRange(1,256)]
        [int]$PasswordLength = 10
    )
 
    #ASCII Character set for Password
    $CharacterSet = @{
            Lowercase   = (97..122) | Get-Random -Count 10 | ForEach-Object {[char]$_}
            Uppercase   = (65..90)  | Get-Random -Count 10 | ForEach-Object {[char]$_}
            Numeric     = (48..57)  | Get-Random -Count 10 | ForEach-Object {[char]$_}
            #SpecialChar = "!@#$%^&*" -split '' | Where-Object {$_ -ne ''} | Get-Random -Count 10
            SpecialChar = (33..47)+(58..64)+(91..96)+(123..126) | Get-Random -Count 10 | ForEach-Object {[char]$_}
    }
 
    #Frame Random Password from given character set
    $StringSet = $CharacterSet.Uppercase + $CharacterSet.Lowercase + $CharacterSet.Numeric + $CharacterSet.SpecialChar
    
    #Join the objects together to get a string
    -join(Get-Random -Count $PasswordLength -InputObject $StringSet)
}