Test-PasswordStrength

In my last post I showed you a function to generate secure and complex passwords. This time I have written a small function you can use to test password strength similar to the strength bar you sometimes see in password fields on websites.

The output is a simple string telling you the strength of the password.

function Test-PasswordStrength {
<#
.SYNOPSIS
Test password strength.
.DESCRIPTION
This functions lets input a password to test it strength.
.EXAMPLE
Test-PasswordStrength 'MyCoolPassword'
.NOTES
Based on code example from https://social.msdn.microsoft.com/Forums/vstudio/en-US/5e3f27d2-49af-410a-85a2-3c47e3f77fb1/how-to-check-for-password-strength?forum=csharpgeneral
Author: Øyvind Kallstad
Date: 24.09.2015
Version: 1.0
.OUTPUTS
System.String
.LINK
https://communary.wordpress.com/
#>
[CmdletBinding()]
param (
# The password to test
[Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
[ValidateNotNullOrEmpty()]
[string] $Password
)
$score = 0
if ($Password.Length -lt 5) {
Write-Verbose 'Password length is less than 5 characters.'
Write-Output 'Very Weak'
break
}
if ($Password.Length -ge 8) {
Write-Verbose 'Password length is equal to or greater than 8 characters. Added 1 to password score.'
$score++
}
if ($Password.Length -ge 12) {
Write-Verbose 'Password length is equal to or greater than 12 characters. Added 1 to password score.'
$score++
}
if ([regex]::IsMatch($Password, '\d+')) {
Write-Verbose 'Password contains numbers. Added 1 to password score.'
$score++
}
if ([regex]::IsMatch($Password, '[a-z]+')) {
Write-Verbose 'Password lowercase letters. Added 1 to password score.'
$score++
}
if ([regex]::IsMatch($Password, '[A-Z]+')) {
Write-Verbose 'Password uppercase letters. Added 1 to password score.'
$score++
}
if ([regex]::IsMatch($Password, '[!@#$%^&*?_~-£(){},]+')) {
Write-Verbose 'Password symbols. Added 1 to password score.'
$score++
}
switch ($score) {
1 { $passwordScore = 'Very Weak' }
2 { $passwordScore = 'Weak' }
3 { $passwordScore = 'Medium' }
4 { $passwordScore = 'Strong' }
5 { $passwordScore = 'Strong' }
6 { $passwordScore = 'Very Strong' }
}
Write-Output $passwordScore
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s