Private/New-LMRandomCred.ps1

<#
.SYNOPSIS
Generates a random password with the specified length.

.DESCRIPTION
The New-LMRandomCred function generates a random password using a specified length. It uses a set of valid password characters and a cryptographic random number generator to ensure the password is secure.

.PARAMETER Length
The length of the password to generate. The default value is 25.

.EXAMPLE
PS> New-LMRandomCred -Length 12
Generates a random password with a length of 12 characters.

.OUTPUTS
System.String
A randomly generated password.

#>

function New-LMRandomCred {

    [CmdletBinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Not needed for this function')]

    param (
        [Int]$Length = 25
    )

    # Valid password characters
    $SymbolSet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!$%^()_-+=}{][@#&\|;:<>.?/".ToCharArray()

    #Generate random bytes
    $Random = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
    $Bytes = New-Object Byte[]($Length)

    #Generate character set
    $Random.GetBytes($Bytes)
    $Result = New-Object Char[]($Length)

    #Construct randomized password
    for ($i = 0 ; $i -lt $Length ; $i++) {
        $Result[$i] = $SymbolSet[$Bytes[$i] % $SymbolSet.Length]
    }

    #Return result
    return -join $Result

}