New-RandomPassword.ps1
<#
.SYNOPSIS Generates a random Password from the Password state generator API .DESCRIPTION Generates a random Password from the Password state generator API .PARAMETER length Length for the generated password .PARAMETER includebrackets If brackets should be included such as {}() .PARAMETER includespecialcharacters If special characters such as ^_> should be included. .PARAMETER includenumbers If numbers should be included. .PARAMETER includelowercase If lowercase characters should be included. .PARAMETER includeuppercase If uppercase should be included. .PARAMETER Quantity The quantity of passwords to generate. .EXAMPLE PS C:\> New-RandomPassword .EXAMPLE New-RandomPassword -length 60 -includenumbers -includeuppercase -includelowercase -includespecialcharacters -includebrackets -Quantity 1 .INPUTS PasswordGeneratorID - Optional parameter if you want to generate a more or less secure password. .OUTPUTS A string value of the generated password. .NOTES Daryl Newsholme 2019 #> function New-RandomPassword { [Diagnostics.CodeAnalysis.SuppressMessageAttribute( 'PSAvoidUsingPlainTextForPassword', '', Justification = 'Not a password just an ID' )] [CmdletBinding(SupportsShouldProcess = $true)] param ( [parameter(ValueFromPipelineByPropertyName, Position = 0)][int32]$length = 12, [parameter(ValueFromPipelineByPropertyName, Position = 1)][switch]$includebrackets, [parameter(ValueFromPipelineByPropertyName, Position = 2)][switch]$includespecialcharacters, [parameter(ValueFromPipelineByPropertyName, Position = 3)][switch]$includenumbers, [parameter(ValueFromPipelineByPropertyName, Position = 4)][switch]$includelowercase, [parameter(ValueFromPipelineByPropertyName, Position = 5)][switch]$includeuppercase, [parameter(ValueFromPipelineByPropertyName, Position = 6)][string]$excludedcharacters, [parameter(ValueFromPipelineByPropertyName, Position = 7)][int32]$Quantity = 1 ) begin { . "$PSScriptRoot\PasswordstateClass.ps1" } process { if ($PSCmdlet.ShouldProcess("")) { if ($PSBoundParameters.Count -lt 1) { $output = Get-PasswordStateResource -uri "/api/generatepassword" } Else { if (!$excludedcharacters) { $excludedcharacters = [uri]::EscapeDataString(" *") } else { $excludedcharacters = [uri]::EscapeDataString(" $excludedcharacters") } if ( $length -and $includelowercase -eq $false -and $includeuppercase -eq $false -and $includenumbers -eq $false -and $includebrackets -eq $false -and $includespecialcharacters -eq $false ) { $includelowercase = $true $includenumbers = $true $includeuppercase = $true } [string]$includebrackets = ([string]$includebrackets).ToLower() [string]$includelowercase = ([string]$includelowercase).ToLower() [string]$includeuppercase = ([string]$includeuppercase).ToLower() [string]$includespecialcharacters = ([string]$includespecialcharacters).ToLower() [string]$includenumbers = ([string]$includenumbers).ToLower() $uri = "/api/generatepassword/?IncludeAlphaSpecial=true&IncludeWordPhrases=false&minLength=$length&maxLength=$length&lowerCaseChars=$includelowercase&upperCaseChars=$includeuppercase&numericChars=$includenumbers&higherAlphaRatio=true&ambiguousChars=true&specialChars=$includespecialcharacters&specialCharsText=!$%+-_=^&bracketChars=$includebrackets&bracketCharsText={}()&NumberOfWords=0&MaxWordLength=0&PrefixAppend=P&SeparateWords=N&ExcludeChars=$excludedcharacters&GeneratePattern=false&Pattern=null&Qty=$quantity" Write-Verbose "[$(Get-Date -format G)] [GET] $uri" Get-PasswordStateResource -uri $uri } } } end { return $output } } |