scripts/public/New-Passphrase.ps1
function New-Passphrase { [CmdletBinding( SupportsShouldProcess, ConfirmImpact = 'Low')] [OutputType([string])] Param ( [Parameter( Mandatory = $false, Position = 0, HelpMessage = 'Amount of words to get')] [ValidateNotNullOrEmpty()] [int] $AmountOfWords = 3, [Parameter( Mandatory = $false, Position = 3, HelpMessage = 'Separator to use between words')] [ValidateNotNullOrEmpty()] [string] $Separator = " ", [Parameter( Mandatory = $false, HelpMessage = 'Includes numbers')] [switch] $IncludeNumbers, [Parameter( Mandatory = $false, Position = 1, HelpMessage = 'Amount of numbers to include')] [ValidateNotNullOrEmpty()] [int] $AmountOfNumbers = 1, [Parameter( Mandatory = $false, HelpMessage = 'Include an uppercase word')] [switch] $IncludeUppercase, [Parameter( Mandatory = $false, HelpMessage = 'Include special characters')] [switch] $IncludeSpecials, [Parameter( Mandatory = $false, Position = 2, HelpMessage = 'Amount of special characters to include')] [int] $AmountOfSpecials = 1 ) $ErrorActionPreference = 'Stop' $InformationPreference = 'Continue' if (-not $PSBoundParameters.ContainsKey('Verbose')) { $VerbosePreference = $PSCmdlet.SessionState.PSVariable.GetValue('VerbosePreference') } if (-not $PSBoundParameters.ContainsKey('Confirm')) { $ConfirmPreference = $PSCmdlet.SessionState.PSVariable.GetValue('ConfirmPreference') } if (-not $PSBoundParameters.ContainsKey('WhatIf')) { $WhatIfPreference = $PSCmdlet.SessionState.PSVariable.GetValue('WhatIfPreference') } Write-Verbose ('[{0}] Confirm={1} ConfirmPreference={2} WhatIf={3} WhatIfPreference={4}' -f $MyInvocation.MyCommand, $Confirm, $ConfirmPreference, $WhatIf, $WhatIfPreference) if ($PSCmdlet.ShouldProcess("Generates a new passphrase")) { try { [System.Collections.Generic.List[string]]$Words = . (Join-Path (Split-Path $PSScriptroot) 'private\Passphraser.Words.ps1') [char[]]$SpecialCharacters = '!"#$%&()*+,-./:;<=>?@\^_{|}' | ForEach-Object { [char[]]$_ } [string]$PasswordString = ($Words | Get-Random -Count $AmountOfWords ) -join $Separator if ($IncludeUppercase) { [string]$Word = $PasswordString.Split($Separator) | Get-Random [string]$PasswordString = $PasswordString.Replace( $Word, $Word.ToUpper() ) } if ($IncludeNumbers) { for ($i = 1; $i -le $AmountOfNumbers; $i++) { [int]$Number = (0..9) | Get-Random [string]$Word = $PasswordString.Split($Separator) | Get-Random [int]$Placement = @( 0, $Word.Length ) | Get-Random [string]$WordWithNumber = $Word.Insert( $Placement, $Number ) [string]$PasswordString = $PasswordString.Replace( $Word, $WordWithNumber ) } } if ($IncludeSpecials) { for ($i = 1; $i -le $AmountOfSpecials; $i++) { [char[]]$Special = $SpecialCharacters | Get-Random [string]$Word = $PasswordString.Split($Separator) | Get-Random [int]$Placement = @( 0, $Word.Length ) | Get-Random [string]$WordWithSpecial = $Word.Insert( $Placement, $Special ) [string]$PasswordString = $PasswordString.Replace( $Word, $WordWithSpecial ) } } return $PasswordString } catch { $PSCmdlet.throwTerminatingError($PSItem) } } } # SIG # Begin signature block # MIIM+AYJKoZIhvcNAQcCoIIM6TCCDOUCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUGSHRNXLlrG21bYcXbJGyMt3v # B2Wgggo/MIIFGTCCBAGgAwIBAgIQDbnGEbOq/3RgewIGXryqxTANBgkqhkiG9w0B # AQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD # VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk # IElEIFJvb3QgQ0EwHhcNMTQxMTE4MTIwMDAwWhcNMjQxMTE4MTIwMDAwWjBtMQsw # CQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDESMBAGA1UEBxMJQW1z # dGVyZGFtMQ8wDQYDVQQKEwZURVJFTkExITAfBgNVBAMTGFRFUkVOQSBDb2RlIFNp # Z25pbmcgQ0EgMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKri5yAv # rBCV+s0k5fig3/WirZ+8s8nh+B/EPuSWQW275wPwDBRxvaY4UbdQOac59kJt4lzE # nv+reNW9ZwMh6W4EzEbfxYcklJ/91iwFYYOTsvXhd2QqutVQ87bab9CLvH8+awDu # XLM0v1DA+MjwfVd+dApIr21ITItvil4jvnbLXYR4VjuIZ5vRiGCiCEQHiImmw/Lc # KuBzbMKbhCb3FD6LSqhpCPSTiegfaeu0KnUyCxmPfLMMuFrkRrRka8fQUJvwgLRP # NXGfIH9ZyFRm7M0zE98JMoUQAmFoPLSSJGC6oNK8tccHvfxQ6jRgCB8CoY8ftyz9 # WqZJgLk5+llJ+RkCAwEAAaOCAbswggG3MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYD # VR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHkGCCsGAQUFBwEBBG0w # azAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUF # BzAChjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVk # SURSb290Q0EuY3J0MIGBBgNVHR8EejB4MDqgOKA2hjRodHRwOi8vY3JsMy5kaWdp # Y2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMDqgOKA2hjRodHRw # Oi8vY3JsNC5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3Js # MD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5k # aWdpY2VydC5jb20vQ1BTMB0GA1UdDgQWBBQyCsEMwWg+V6gt+Xki5Y6c6USOMjAf # BgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkqhkiG9w0BAQsFAAOC # AQEARK1QChmvA+HzpJ7KM8s0RJW06t34uUi15WqZw7cBjq7VxHMefVoI/Rm/IEzF # AbvIstsQydkrDd3OcTzcW665Z0vvvbBEmLhhKdyoenOyFL10PzBcw3nADPRW3LP+ # 4Yl4RaWH6Fkoj0SLbQY/sTbEMO50bFTLxAPXb3ga42xDdhVGniJJWZdNON4bTNJ8 # lhv8utfpehgwFyzVhoku0JoZPjXyxiu+UUlnSR1lIa9CIk4NTQ8aAumbgnbn/Iqw # e3VWTeo/kA+KJwRVMBN6U6H+9l6i9kk5VF8DyYtqNc4wqALgQBXtFZUQHQZj7++N # o5rhwVpgmjGEl7nwi5AqasvHIjCCBR4wggQGoAMCAQICEAc7i58aZsyuhHuR4DLA # /D4wDQYJKoZIhvcNAQELBQAwbTELMAkGA1UEBhMCTkwxFjAUBgNVBAgTDU5vb3Jk # LUhvbGxhbmQxEjAQBgNVBAcTCUFtc3RlcmRhbTEPMA0GA1UEChMGVEVSRU5BMSEw # HwYDVQQDExhURVJFTkEgQ29kZSBTaWduaW5nIENBIDMwHhcNMTgxMjA1MDAwMDAw # WhcNMjExMjA4MTIwMDAwWjBrMQswCQYDVQQGEwJOTzENMAsGA1UEBxMET3NsbzEf # MB0GA1UECgwWTm9yZ2VzIG11c2lra2jDuGdza29sZTELMAkGA1UECxMCSVQxHzAd # BgNVBAMMFk5vcmdlcyBtdXNpa2tow7hnc2tvbGUwggEiMA0GCSqGSIb3DQEBAQUA # A4IBDwAwggEKAoIBAQDP5Goq8/HycbDA/W4fivn4cqPm6xrWw/w+u+Bu7ZUoQDNK # 3DyFB10P0IXF2w94c4Kr9R6LykFfVxnKYHiCU9hdApEqp9oyqmw9zSwZrI2YIih4 # BOSXop2eN0Rk0hS1+2dPEZ739Y2A4aKtVmrCdKVPrn5BENVUl+vU06f7LsKn6a8m # F3xGdWY7iWwaNrRfWwkyjkADa3WEAb9gn4w9N4Cas0LdiT8FTmAgwcD7lwtMtcQR # QnsKmK+w7li1Y8aUs/66eVS7s+vo2UybwL9eX32RJDS7/xB6tvlzHL6+jBkZ43s7 # CMpSIIryzuUvJbfxi5iYZhVYmt38bfPe6IQ12aqJAgMBAAGjggG6MIIBtjAfBgNV # HSMEGDAWgBQyCsEMwWg+V6gt+Xki5Y6c6USOMjAdBgNVHQ4EFgQUSNYRh/NjMM2c # P60D3bXEYy6ETkowDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMD # MHsGA1UdHwR0MHIwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9URVJF # TkFDb2RlU2lnbmluZ0NBMy5jcmwwN6A1oDOGMWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0 # LmNvbS9URVJFTkFDb2RlU2lnbmluZ0NBMy5jcmwwTAYDVR0gBEUwQzA3BglghkgB # hv1sAwEwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQ # UzAIBgZngQwBBAEwdgYIKwYBBQUHAQEEajBoMCQGCCsGAQUFBzABhhhodHRwOi8v # b2NzcC5kaWdpY2VydC5jb20wQAYIKwYBBQUHMAKGNGh0dHA6Ly9jYWNlcnRzLmRp # Z2ljZXJ0LmNvbS9URVJFTkFDb2RlU2lnbmluZ0NBMy5jcnQwDAYDVR0TAQH/BAIw # ADANBgkqhkiG9w0BAQsFAAOCAQEAYXdI/OeJHNVlDYrNsvn8hpQ9dVSJxBUKlU9X # 9HHOfflqz34I0zQYS0hohfwFPFrTNvECo5RsfRWXNe0lxM2lWXwwDuZLPVQOtd9R # mjW/6ZSGHP7LVxuWfhIxhRHNsaALd7UCU7xQeYF9Yf/nWBOb+k9TF3F1poraNm8r # fCD8ZwIZuquzyVNY/XHRiXNlVIplYT0njx/NgM1DG2heT12GNPqFZO5OIArNGvrF # s2En9d48g48TDpk7wwne6dOHtlV3JqJ6Dd5z9zF9Y3H0qWUWo9tUAu0ew2mAUY7S # XUW7hG9ErJvXx4a2ySiJuz0jxka/DmIMJJtnw2QIvMqM4YqSSjGCAiMwggIfAgEB # MIGBMG0xCzAJBgNVBAYTAk5MMRYwFAYDVQQIEw1Ob29yZC1Ib2xsYW5kMRIwEAYD # VQQHEwlBbXN0ZXJkYW0xDzANBgNVBAoTBlRFUkVOQTEhMB8GA1UEAxMYVEVSRU5B # IENvZGUgU2lnbmluZyBDQSAzAhAHO4ufGmbMroR7keAywPw+MAkGBSsOAwIaBQCg # eDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEE # AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJ # BDEWBBQjemZK6J5BbfWjpriklDuWLq9q5jANBgkqhkiG9w0BAQEFAASCAQAEgrIr # xqke7jrPT0uyYrKo736xGBDRWQJmgi0fVhRGWRqGuf7Q32ntHilm3jhGzII9owbc # bviXHTfPSHUIcqswT45B+ugyf3wkLILbpOxu+9au0NqwCHXdXRX1i2TYpk/6KK+h # WZ1P5t8d7oR4a0EU/Z/xwskbg3719MzSSncRnvtvhuP2m/fgpxaUDXZvrPDFo8Be # EjttHEdzRIm5VSa0+xavEjKnO2fJ9ZumvF/Ra28ijDU9lLpcdQT6X+kfqxP2d7DD # 7ZN3Hzmf/RTSzBWPSHc2VrfzfJPegkqqHWquzVga3DRUo9TrFzgpmeTCfC64lEy6 # O44liiiSBSpHLkak # SIG # End signature block |