
ランダム文字列のパスワードを簡単に一括生成して、クリップボードにコピーするようなVBSを作ってみました。
個人的に、複数のパスワードを大量に生成しなければならないケースがたびたびあったためです。
個人的に、複数のパスワードを大量に生成しなければならないケースがたびたびあったためです。
【8文字のパスワードを複数生成するスクリプト】
このスクリプトは、パスワード生成に関して以下の機能を持ちます。
●生成されたパスワードは、クリップボードにコピーされる
●生成するパスワードの数を指定できる
●数字・英小文字・英大文字が、それぞれ1つ以上含まれる
●紛らわしい文字を除外して、使用しない(0Oo 1Il 9gq UV)
●生成されたパスワードは、クリップボードにコピーされる
●生成するパスワードの数を指定できる
●数字・英小文字・英大文字が、それぞれ1つ以上含まれる
●紛らわしい文字を除外して、使用しない(0Oo 1Il 9gq UV)
Option Explicit
Dim objShell
Dim strCopy 'パスワード文字列を格納する変数
Dim num '生成するパスワードの数を格納する変数
Dim maxLetter : maxLetter = 20 '生成するパスワードの最大数
Dim i 'For文で使用するカウンター
num = 1 '生成するパスワード数の初期値
Do
num = InputBox("何種類のパスワードを生成しますか?" & _
vbNewLine &"(最大" & maxLetter & "。空白の場合は1として処理)", _
WScript.ScriptName)
If IsEmpty(num) Then
WScript.Quit
Elseif num = "" Then
num = 1
End If
Loop Until IsNumeric(num)
num = Int(num)
If num > maxLetter Then num = maxLetter '最大数を超える場合は、最大数にする。
For i = 1 To num
'パスワード生成用プライベート関数 makePassword をnum回実行する。
If i = 1 then '1つ目を生成するときは、そのまま出力する
strCopy = makePassword
Else '2つ目以降は、改行を加えて追記する
strCopy = makePassword & vbNewLine & strCopy
End If
Next
'クリップボードに格納する
Set objShell = CreateObject("WScript.Shell")
objShell.Exec("clip").StdIn.Write strCopy
Set objShell = Nothing
MsgBox "クリップボードに格納しました。" & vbCrLf & strCopy, , WScript.ScriptName
WScript.Quit
'----------------------------------------------------------------------------------
Private Function makePassword()
Dim str 'パスワードに使用する文字
Dim strMax 'strの配列の要素数
'英大文字・小文字・数字で8文字のランダム文字列を生成する。
'ただし、0Oo 1Il 9gq UVを除外した51種類から選択。
str = Array("2","3","4","5","6","7","8", _
"A","B","C","D","E","F","G","H", "J","K","L","M", _
"N", "P","Q","R","S","T", "W","X","Y","Z", _
"a","b","c","d","e","f", "h","i","j","k", "m", _
"n", "p", "r","s","t","u","v","w","x","y","z")
'パスワードに使用する文字で構成された配列
strMax = Ubound(str)+1
'50+1=51 (vbsの配列は常に0スタートなので、0 to 50で配列の要素数は51)
Const Mojisuu = 8 '生成するパスワードの文字数
Dim rndstr '生成されたパスワード
Dim rndnum '配列strの要素番号。0-50の間からランダムに選ばれる。
Dim i 'For文で使用する変数
For i = 1 To Mojisuu 'ランダム1文字生成を8回
Randomize
Wscript.sleep Int(10 * Rnd + 1)
'Forの時間間隔をランダム化させることにより、似通ったパスワードが生成されないようにする。
Randomize
rndnum = Int(Rnd() * strMax) '0-0.999 * 51 = 0-50.999 => 整数化 0-50
rndstr = rndstr & str(rndnum)
Next
'正規表現で文字列をチェック(数字・英小文字・英大文字すべて含まれているか)
Dim objRE1 : Dim objRE2 : Dim objRE3
Set objRE1 = CreateObject("VBScript.RegExp")
objRE1.Pattern = "\d" '数字を含む
Set objRE2 = CreateObject("VBScript.RegExp")
objRE2.Pattern = "[A-Z]" '英大文字を含む
Set objRE3 = CreateObject("VBScript.RegExp")
objRE3.Pattern = "[a-z]" '英小文字を含む
If objRE1.Test(rndstr) And objRE2.Test(rndstr) And objRE3.Test(rndstr) Then
makePassword = rndstr 'すべての条件にマッチしたら、生成された文字列を返す
Else
makePassword = makePassword() 'マッチしなければ、再帰的にパスワード生成を実施
End If
End Function