DictionaryFile.psm1
function Get-PasswordNumber { <# .SYNOPSIS Calculates the number of possible passwords .DESCRIPTION Calculates the number of possible passwords based on the input so you will know the actual number before you proceed to create your dictionary file. .PARAMETER CharacterSet Specifies the characters (letters, numbers, symbols) that need to be included. Parameter is mandatory. .PARAMETER MinCharacters Specifies the minimum characters of the generated passwords. Parameter is mandatory. .PARAMETER MaxCharacters Specifies the maximum characters of the generated passwords. Parameter is mandatory. .PARAMETER IncludeCapital Specifies whether or not to include upper case letters along with the lower case letters. .PARAMETER CapitalOnly Specifies whether or not all lower case letters to be converted to upper case letters. .INPUTS System.String. Get-PasswordNumber can accept a string value to determine the CharacterSet parameter. .OUTPUTS System.Double. Get-PasswordNumber returns the number of passwords that can be created. .EXAMPLE PS C:\> Get-PasswordNumber -CharacterSet "a,b,c,1,2,3,$,*,&" -MinCharacters 2 -MaxCharacters 5 66420 .EXAMPLE PS C:\> Get-PasswordNumber -Characters "a,b,c,1,2,3,$,*,&" -MinCharacters 2 -MaxCharacters 5 -IncludeCapital 271440 .EXAMPLE PS C:\> Get-PasswordNumber -Characters "a,b,c,1,2,3,$,*,&" -MinCharacters 2 -MaxCharacters 5 -CapitalOnly 66420 .EXAMPLE PS C:\> Get-PasswordNumber -Characters alphabet -MinCharacters 2 -MaxCharacters 5 12356604 .EXAMPLE PS C:\> Get-PasswordNumber "av,b,c" -MinCharacters 2 -MaxCharacters 2 9 .EXAMPLE PS C:\> "a,b,c" | Get-PasswordNumber -MinCharacters 2 -MaxCharacters 2 9 .EXAMPLE PS C:\> Get-PasswordNumber -CharacterSet "ad,b,c" -MinCharacters 2 -MaxCharacters 2 | ForEach-Object {$_ * 2} 18 .LINK https://www.sconstantinou.com/get-passwordnumber .LINK Get-PasswordCombination .LINK New-DictionaryFile .LINK Get-DictionaryFile #> [cmdletbinding()] param( [parameter(Mandatory = $true,ValueFromPipeline = $true)][alias("c")][String]$CharacterSet, [parameter(Mandatory = $true)][alias("min")][Uint32]$MinCharacters, [parameter(Mandatory = $true)][alias("max")][Uint32]$MaxCharacters, [alias("ic")][switch]$IncludeCapital, [alias("co")][switch]$CapitalOnly) if ($MinCharacters -eq "0"){ throw "MinCharacters value cannot zero." } if ($CharacterSet -eq "alphabet"){ $CharacterSet = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z" } if ($CapitalOnly -eq $True){ $CharacterSet = $CharacterSet.ToUpper() } if ($IncludeCapital -eq $True){ $CharactersCapital = $CharacterSet.ToUpper() $CharacterSetLow = $CharacterSet $CharacterSet = "" $CharacterSet = $CharacterSetLow, $CharactersCapital -join "," } $pool = $CharacterSet -split ',' $pool = $pool | Select-Object -Unique [Uint32]$n = $pool.count switch ($MinCharacters){ {$_ -eq $MaxCharacters}{ [Uint32]$n = $pool.count [Uint32]$r = $_ [Double]$TotalPossibilities = [math]::Pow($n,$r) Write-Output $TotalPossibilities } {$_ -gt $MaxCharacters}{ throw "MinCharacters value cannot be greater than MaxCharacters value" } {$_ -lt $MaxCharacters}{ [int]$TotalPossibilities = 0 for ($i = $MinCharacters;$i -le $MaxCharacters; $i++){ [Uint32]$n = $pool.count [Uint32]$r = $i [Double]$TempPossibilities = [math]::Pow($n,$r) [Double]$TotalPossibilities = $TotalPossibilities + $TempPossibilities } Write-Output $TotalPossibilities } } } New-Alias -Name gpn -Value Get-PasswordNumber Function Get-Password { Param( [Object[]]$FullSet, [String]$Comma, [Uint32]$CurrentIndex = 0, [String]$TemporaryText = "", [String]$OutFile) $MaximumIndex = $FullSet.Count - 1 foreach ($_ in $FullSet[$CurrentIndex]){ [Array]$Password = "$($TemporaryText)$($Comma)$($_)".Trim($Comma) If ($CurrentIndex -lt $MaximumIndex) { $Password = Get-Password $FullSet -CurrentIndex ($CurrentIndex + 1) -TemporaryText $Password -OutFile $OutFile } if ($OutFile -eq ""){Write-Output $Password} else{Add-Content -Path $OutFile -Value $Password} } } function Get-PasswordCombination { <# .SYNOPSIS Creates all possbile passwords .DESCRIPTION Creates all possible passowrds based on your input and provides the results in output. .PARAMETER CharacterSet Specifies the characters (letters, numbers, symbols) that need to be included. Parameter is mandatory. .PARAMETER MinCharacters Specifies the minimum characters of the generated passwords. Parameter is mandatory. .PARAMETER MaxCharacters Specifies the maximum characters of the generated passwords. Parameter is mandatory. .PARAMETER IncludeCapital Specifies whether or not to include upper case letters along with the lower case letters. .PARAMETER CapitalOnly Specifies whether or not all lower case letters to be converted to upper case letters. .INPUTS System.String. Get-PasswordCombination can accept a string value to determine the CharacterSet parameter. .OUTPUTS System.String. Get-PasswordCombination returns the generated password. .EXAMPLE PS C:\> Get-PasswordCombination -CharacterSet "a,b,c" -MinCharacters 1 -MaxCharacters 2 a b c aa ab ac ba bb bc ca cb cc .EXAMPLE PS C:\> Get-PasswordCombination -CharacterSet "a,b,c" -MinCharacters 1 -MaxCharacters 2 -IncludeCapital a b c A B C aa ab ac aA aB aC ba bb bc bA bB bC ca cb cc cA cB cC Aa Ab Ac AA AB AC Ba Bb Bc BA BB BC Ca Cb Cc CA CB CC .EXAMPLE PS C:\> Get-PasswordCombination -CharacterSet "a,b,c" -MinCharacters 1 -MaxCharacters 2 -CapitalOnly A B C AA AB AC BA BB BC CA CB CC .EXAMPLE PS C:\> Get-PasswordCombination -CharacterSet "alphabet" -MinCharacters 1 -MaxCharacters 3 a b c d e f g h i j k l m n ... xu xv xw xx xy xz ya yb yc yd ye yf yg ... zzz .EXAMPLE PS C:\> Get-PasswordCombination "av,b,c" -MinCharacters 2 -MaxCharacters 2 avav avb avc bav bb bc cav cb cc .EXAMPLE PS C:\> "a,b,c" | Get-PasswordCombination -MinCharacters 2 -MaxCharacters 2 aa ab ac ba bb bc ca cb cc .EXAMPLE PS C:\> Get-PasswordCombination -CharacterSet "ad,b,c" -MinCharacters 3 -MaxCharacters 3 | Where-Object {$_ -like "*db*"} adadb adbad adbb adbc badb cadb .LINK https://www.sconstantinou.com/get-passwordcombination .LINK New-DictionaryFile .LINK Get-PasswordNumber .LINK Get-DictionaryFile #> [cmdletbinding()] param( [parameter(Mandatory = $true,ValueFromPipeline = $true)][alias("c")][String]$CharacterSet, [parameter(Mandatory = $true)][alias("min")][Uint32]$MinCharacters, [parameter(Mandatory = $true)][alias("max")][Uint32]$MaxCharacters, [alias("ic")][Switch]$IncludeCapital, [alias("co")][Switch]$CapitalOnly) if ($CharacterSet -eq "alphabet"){ $CharacterSet = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z" } if ($CapitalOnly -eq $True){ $CharacterSet = $CharacterSet.ToUpper() } if ($IncludeCapital -eq $True){ $CharactersCapital = $CharacterSet.ToUpper() $CharacterSetLow = $CharacterSet $CharacterSet = "" $CharacterSet = $CharacterSetLow, $CharactersCapital -join "," } $pool = $CharacterSet -split ',' [Array]$pool = $pool | Select-Object -Unique for ($i = $MinCharacters; $i -le $MaxCharacters; $i++){ $Passwords = @() for ($p = 1;$p -le $i;$p++){ [Object[]]$Passwords += ,$pool } Get-Password $Passwords } } New-Alias -Name gpc -Value Get-PasswordCombination function New-DictionaryFile { <# .SYNOPSIS Creates a dictionary file. .DESCRIPTION Creates a dictionary file containing all possible passwords that can be created based on your input. .PARAMETER CharacterSet Specifies the characters (letters, numbers, symbols) that need to be included. Parameter is mandatory. .PARAMETER MinCharacters Specifies the minimum characters of the generated passwords. Parameter is mandatory. .PARAMETER MaxCharacters Specifies the maximum characters of the generated passwords. Parameter is mandatory. .PARAMETER IncludeCapital Specifies whether or not to include upper case letters along with the lower case letters. .PARAMETER CapitalOnly Specifies whether or not all lower case letters to be converted to upper case letters. .PARAMETER Path Specifies the path and file that generated passwords will be saved. Parameter is mandatory. .INPUTS System.String. New-DictionaryFile can accept a string value to determine the CharacterSet parameter. .OUTPUTS None. New-DictionaryFile will save all the generated passwords to the specified path. .EXAMPLE PS C:\> New-DictionaryFile -CharacterSet "a,b,c,1,$" -MinCharacters 2 -MaxCharacters 5 -Path C:\Scripts_Output\MyFile.txt .EXAMPLE PS C:\> New-DictionaryFile -CharacterSet "a,b,c,1,$" -MinCharacters 2 -MaxCharacters 5 -IncludeCapital -Path C:\Scripts_Output\MyFile.txt .EXAMPLE PS C:\> New-DictionaryFile -CharacterSet "a,b,c,1,$" -MinCharacters 2 -MaxCharacters 5 -CapitalOnly -Path C:\Scripts_Output\MyFile.txt .EXAMPLE PS C:\> New-DictionaryFile -CharacterSet "alphabet" -MinCharacters 1 -MaxCharacters 3 -Path C:\Scripts_Output\MyFile.txt .EXAMPLE PS C:\> New-DictionaryFile "av,b,c" -MinCharacters 2 -MaxCharacters 2 -Path C:\Scripts_Output\MyFile.txt .EXAMPLE PS C:\> "a,b,c" | New-DictionaryFile -MinCharacters 2 -MaxCharacters 2 -Path C:\Scripts_Output\MyFile.txt .LINK https://www.sconstantinou.com/new-dictionaryfile .LINK Get-PasswordCombination .LINK Get-PasswordNumber .LINK Get-DictionaryFile #> [cmdletbinding(SupportsShouldProcess, ConfirmImpact='Medium')] param( [parameter(Mandatory = $true,ValueFromPipeline = $true)][alias("c")][String]$CharacterSet, [parameter(Mandatory = $true)][alias("min")][Uint32]$MinCharacters, [parameter(Mandatory = $true)][alias("max")][Uint32]$MaxCharacters, [alias("ic")][Switch]$IncludeCapital, [alias("co")][Switch]$CapitalOnly, [parameter(Mandatory = $true)][alias("p")][String]$Path = "") $Directory = Split-Path $Path $File = [System.IO.Path]::GetFileName($Path) if ($CharacterSet -eq "alphabet"){ $CharacterSet = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z" } if ($CapitalOnly -eq $True){ $CharacterSet = $CharacterSet.ToUpper() } if ($IncludeCapital -eq $True){ $CharactersCapital = $CharacterSet.ToUpper() $CharacterSetLow = $CharacterSet $CharacterSet = "" $CharacterSet = $CharacterSetLow, $CharactersCapital -join "," } if (-not (Test-Path -Path $Directory -PathType Container)){ New-Item -Path $Directory -ItemType Directory -Force | Out-Null } if (-not (Test-Path -Path $Path -PathType Leaf)){ New-Item -Path $Directory -Name $File -ItemType File -Force | Out-Null } else{ Remove-Item -Path "$Path" -Force | Out-Null New-Item -Path $Directory -Name $File -ItemType File -Force | Out-Null } $pool = $CharacterSet -split ',' [Array]$pool = $pool | Select-Object -Unique for ($i = $MinCharacters; $i -le $MaxCharacters; $i++){ $Passwords = @() for ($p = 1;$p -le $i;$p++){ [Object[]]$Passwords += ,$pool } Get-Password $Passwords -OutFile "$Path" } } New-Alias -Name ndf -Value New-DictionaryFile function Get-DictionaryFile { <# .SYNOPSIS Imports a dictionary file .DESCRIPTION Imports a previously created dictionary file into memory. .PARAMETER CharacterSet Specifies the characters (letters, numbers, symbols) that need to be included. Parameter is mandatory. .INPUTS System.String. Get-DictionaryFile can accept a string value to determine the path of the dictionary file. .OUTPUTS System.Array. Get-DictionaryFile will provide the passwords that where included in the dictionary file in an array. .EXAMPLE PS C:\> Get-DictionaryFile -Path C:\Scripts\DictionaryFile.txt aa ab ac ba bb bc ca cb cc .EXAMPLE PS C:\> "C:\Scripts\DictionaryFile.txt" | Get-DictionaryFile aa ab ac ba bb bc ca cb cc .EXAMPLE PS C:\> Get-DictionaryFile -Path "C:\Scripts\DictionaryFile.txt" | ForEach-Object {$_ + "a"} aaa aba aca baa bba bca caa cba cca .EXAMPLE PS C:\> "C:\Scripts\DictionaryFile.txt" | Get-DictionaryFile | Where-Object {$_ -like "*b*"} ab ba bb bc cb .LINK https://www.sconstantinou.com/get-dictionaryfile .LINK Get-PasswordCombination .LINK Get-PasswordNumber .LINK New-DictionaryFile #> [cmdletbinding()] param([parameter(Mandatory = $true,ValueFromPipeline = $true)][alias("p")][String]$Path) [Array]$DictionaryFile = Get-Content -Path $Path Write-Output $DictionaryFile } New-Alias -Name gdf -Value Get-DictionaryFile |