IT関連

PowerShellでランダム文字で特定桁数を出力する

おはようございます。こんにちは。こんばんは。
ミッド(@mid_v_lab)です

本日はPowerShellで、ランダム文字で特定桁数を出力する方法をご紹介します。

パスワードを初期化したとき、既定の文字数でランダムの値を作りたいときや、

新規ID作成時に適当なパスワードを設定したいときに便利です。

コードはこれだ!

ランダム文字列発行(8桁)

・数字のみ

-Join (Get-Random -Count 8 -input 0,1,2,3,4,5,6,7,8,9)

・アルファベットのみ

-Join (Get-Random -Count 8 -input 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)

・数字とアルファベット

-Join (Get-Random -Count 8 -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)

解説

「Get-Random」は、「-input」で指定された文字から、「-Count」で指定された文字数をランダムで取得するコマンドです。

Joinを付けずに実行すると、下記のような実行結果になります。

PS C:\Users> Get-Random -Count 8 -input 0,1,2,3,4,5,6,7,8,9
5
2
3
6
0
9
8
1

これに「-Join」をいれることで、結果をすべてくっつけています。

PS C:\Users> -Join (Get-Random -Count 8 -input 0,1,2,3,4,5,6,7,8,9)
21039578

桁数を変えたい場合は、「-Count ○」の部分の数字を変更します。

例えば「10」に変更すると、10桁になります。

PS C:\Users> -Join (Get-Random -Count 10 -input 0,1,2,3,4,5,6,7,8,9)
1265093478

上記で紹介しているコードでは、数字、アルファベット、両方という3パターンを紹介していますが、「-input」に入れている文字が違うだけです。

数字とアルファベット以外も入力可能ですが、「!」や「%」などPowerShell上で機能する記号は「`(バックダッシュ)」でエスケープが必要です。(変数などではなくて、ただの文字ですと宣言する)

PS C:\Users> -Join (Get-Random -Count 10 -input `!,?,`%,$,`@)
$@%?!

注意

上記の記号を出した例で、おや?っと思った方、勘が良いです。

このコードでは、inputで入れた文字をランダムでCount数分出力するので、Countと同等数のinputが必要です。

例えば、数字のみをCountの数を「11」にすると、10桁しか出ません。(0~9で1個ずつ重複なしで取り出して10桁が最大)

PS C:\Users> -Join (Get-Random -Count 11 -input 0,1,2,3,4,5,6,7,8,9)
5302861974

そのため、数字だけで桁数を増やそうと思ったら、inputの数字を増やしてあげる必要があります。

PS C:\Users> -Join (Get-Random -Count 11 -input 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9)
40635208157

大抵の場合、8桁とか10桁とかだと思いますので、0~9の1巡で良いと思いますし、アルファベットも含めると、相当な桁数が作成できるので問題にならないと思いますが、

もし数字だけで重複もありで、ランダムな桁数の数列を取り出したい場合は、このコードでは向いていないので、もう少し工夫が必要ですね。


システムの運用業務をやっていると、新規ID作成、パスワード初期化などがいっぱいくるので、こうしたパスワードを自動発行する仕組みを作っておくと手間が減りますね。

今回はランダムの文字列を作成するだけですが、実用化するにはもう少しコードが必要ですね。桁数指定を都度入力したりとか、クリップボードに自動で入れるとか、メール本文を自動生成してコピペできる形式で出力するとか、etc

「0」と「O」、「1」と「l」など、ユーザが勘違いしやすい文字をあらかじめ抜いておくなどすると、よりユーザライクでよろしいかと思います。

ではでは

にほんブログ村 サラリーマン日記ブログ IT系サラリーマンへ
PVアクセスランキング にほんブログ村