LoginSignup
15
20

More than 5 years have passed since last update.

PowerShellでパスワード生成

Last updated at Posted at 2017-01-10

新年早々、社内システムのログインパスワードを忘れてしまい、危うくロックアウトされるところでした。

それ自体は何とかなりましたが、あと数か月もするとパスワード更新時期になります。新しいパスワード考えるの面倒だな。。。

ということで本題。PowerShellでパスワードを生成するスクリプトを作ってみました。

パスワード生成といえば乱数生成

必要な桁数分、任意の文字を発生させればいいですね。PowerShellで乱数を発生させるコマンドレットはGet-Randomになります。

Get-Randomはプログラム言語によくあるrand()関数とかと違って、整数を返してくれるので便利。黙って起動すれば0から2,147,483,647までのいずれかの整数が返ってきます。

(*'-') >> Get-Random
1674970342

生成範囲は-Minimumパラメーターと-Maximumパラメーターを使って任意に設定することができます。たとえば8から16までの任意の数を生成したければ。。。

(*'-') >> Get-Random -Minimum 8 -Maximum 16
13

といった按配。

更に-InputObjectパラメーターを使うことで指定した値のリストから選択して返してくれる。自分で変換しなくていい!

(*'-') >> Get-Random -InputObject "Pen","Apple","Pineapple"
Pen

らくちん!

foreachループを使ったパスワード生成

というわけで8桁から16桁までの英小文字または数字を組み合わせた任意の文字列を生成するコードはこちら。

$passwd=""
foreach ($n in 1..$(Get-Random -min 8 -max 16)) {
  $passwd=$passwd+$(Get-Random -input 0,1,2,3,4,5,6,7,8,9,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)
}
$passwd

パラメーター名は省略形を使っています。

Countパラメータを使ったパスワード生成

-Countパラメーターを使うとワンライナーで生成できます。

(*'-') >> Write-Host (Write-Host -NoNewLine -Separator "" (Get-Random -Count (Get-Random -min 8 -max 16) -input 0,1,2,3,4,5,6,7,8,9,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))
tubleg8fc30zra

ただし出力が縦に並んでしまうので、Write-Hostコマンドレットの-NoNewLineパラメータと-Separatorパラメータを使って1行に整形した後、もう一度Write-Hostコマンドレットで行末を改行しています。ちょっとカッコ悪いですね。

…と思ったら-Join演算子を使って解決できました。stknohgさん、ご指摘ありがとうございました。

(*'-') >> -Join (Get-Random -Count (Get-Random -min 8 -max 16) -input 0,1,2,3,4,5,6,7,8,9,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)                                                                                          
uzcfkhxd8qsj

いずれにしてもどちらかのコードを$profileあたりに関数定義しておけばいいでしょう。

問題はパスワード更新の時期までこのことを覚えているかどうかだな。。。(´Д`*)

注)-Countパラメータは-Inputパラメータで指定した以上の数を出力することができません。繰り返し回数が多い場合はforeachでループさせましょう。

15
20
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
20