Delší dobu jsem používal generátor hesel v Keepass 2, ale docela mě zajímalo, jako Powershell "magora", jak lze takový generátor hesel udělat pomocí Powershellu. Nakonec jsem přišel na to, že jednodušší už to být snad ani nemůže. Od té doby jej používám přes makra.

Jak na to?

V první řadě otevřeme ISE editor Powershellu. Poté můžeme začít objevovat. Každý správný generátor hesel by měl nabízet, jak dlouhé heslo chceme vygenerovat. Proto abychom si mohli sami zadat délku generovaného hesla, tak použíjeme následující řádek:

$pwdleng = read-host "Delka hesla"

Co to dělá? Je to jednoduché, read-host nám vyvolá v konzoli pole, do kterého budeme moci zapsat číslo (délku hesla) a tento údaj zapíše do proměnné $pwdleng.

Délku hesla máme vyřešenou a můžeme se přesunout na hlavní část kódu. Je to samotná logika generování hesla. Kód je následující:

$Private:OFS = ""
$PasswordLength = $pwdleng
$InclChars = ‘abcdefghkmnprstuvwxyzABCDEFGHKLMNPRSTUVWXYZ123456789#&@$€-_?!’
$RandomNums = 1..$PasswordLength | ForEach-Object { Get-Random -Maximum $InclChars.length }
$RandomPassword = [String]$InclChars[$RandomNums]

$Private:OFS => Separátor jednotlivých znaků, které generujeme, v našem případě žádný separátor $PasswordLength => Délka hesla $InclChars => Zvolíme si, jaké znaky chceme použít při generování hesla $RandomNums => Foreach pro náhodné čísla dle toho, jak jsme si zvolili délku hesla $RandomPassword => Proměnná, do které se načte vygenerované heslo jako String

Logiku generování bychom měli, teď ještě vygenerované heslo musíme zobrazit. Asi nejjednodušší způsob je použít write-host, který heslo zobrazí v konzoli. Kód vypadá následovně:

write-host "Heslo:" $RandomPassword

Hotový skript můžete najít na GIT zde