Public/Crypto/New-Password.ps1

function New-Password {
  <#
    .SYNOPSIS
        Creates a password string
    .DESCRIPTION
        Creates a password containing minimum of 9 characters, 1 lowercase, 1 uppercase, 1 numeric, and 1 special character.
        Can not exceed 999 characters
    .LINK
        https://github.com/alainQtec/cliHelper.core/blob/main/Private/cliHelper.core.xcrypt/cliHelper.core.xcrypt.psm1
    .EXAMPLE
        New-Password
        Explanation of the function or its result. You can include multiple examples with additional .EXAMPLE lines
    #>

  [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'No system state is being changed')]
  [CmdletBinding(DefaultParameterSetName = 'asSecureString')]
  param (
    # Exact password Length. Note: The minimum length is 14 characters, Otherwise it nearly impossible to create a password under 14 characters. Youll'd be better off use a random text generator!
    [Parameter(Position = 0, Mandatory = $false, ParameterSetName = '__AllParameterSets')]
    [Alias('l')][ValidateRange(14, 999)]
    [int]$Length = 19,

    [Parameter(Mandatory = $false, ParameterSetName = '__AllParameterSets')]
    [switch]$StartWithLetter,

    [Parameter(Mandatory = $false, ParameterSetName = '__AllParameterSets')]
    [switch]$NoSymbols,

    [Parameter(Mandatory = $false, ParameterSetName = '__AllParameterSets')]
    [switch]$UseAmbiguousCharacters,

    [Parameter(Mandatory = $false, ParameterSetName = '__AllParameterSets')]
    [switch]$UseExtendedAscii,

    [Parameter(Mandatory = $false, ParameterSetName = 'PlainText')]
    [switch]$AsPlainText
  )

  begin {
    $Pass = [string]::Empty
    # $params = $PSCmdlet.MyInvocation.BoundParameters
  }

  process {
    $Pass = [xcrypt]::GeneratePassword($Length, $StartWithLetter, $NoSymbols, $UseAmbiguousCharacters, $UseExtendedAscii);
    if ($PSCmdlet.ParameterSetName -eq 'asSecureString') {
      $pass = $Pass | xconvert ToSecurestring
    }
  }
  end {
    return $Pass
  }
}