PowerShellで大文字小文字記号数字を含むパスワードを生成するワンライナーを書いてみました。
なんか他にもっといい書き方だったり、そもそも何かしらそういうツールを使うって話があるかと思いますが。
一つのサンプルとして解説します。
1..[int]::maxvalue | % {-join $(Get-Random -Count 32 -Input $(48..122 | % {[char]$_})) } | ?{$_ -cmatch '[a-z]'} | ?{$_ -cmatch '[A-Z]'} | ?{$_ -cmatch '[0-9]'} | ?{$_ -cmatch '[^a-zA-Z0-9]'} | Select-Object -first 1
実行すると画像のような形で文字列を出力します。
このワンライナーが何をやっているか解説。
やってる事を分解すると
-
1..[int]::maxvalue
でひたすらループさせる。 -
% {-join $(Get-Random -Count 32 -Input $(48..122 | % {[char]$_})) }
32文字の文字列を生成する -
?{$_ -cmatch '[a-z]'} | ?{$_ -cmatch '[A-Z]'} | ?{$_ -cmatch '[0-9]'} | ?{$_ -cmatch '[^a-zA-Z0-9]'}
a-zにマッチする、A-Zにマッチする、0-9にマッチする、それ以外(記号)にマッチするかどうか判定することによってそれぞれが1文字は含まれている文字列のみ選択する -
Select-Object -first 1
最初の一件を取得
ざっくりと流れを書くとこんな形。
大文字、小文字、数字、記号がそれぞれ含まれるように文字列を生成するんじゃなくて。
生成した文字列にそれらが含まれる1件が取得できるまで文字列生成を繰り返す。
そんな作りとなります。
総評
こういう処理をさっくりとかけるPowerShell。便利かと思います。