#author("2018-08-20T13:45:04+09:00","","") * VBScriptでランダムなパスワードを生成するスクリプト [#s44493fb] ちょっと所用でランダムなパスワード生成が必要になったので、VBSのスクリプトを作成しました。~ 使い方とソースコードを公開します。~ &color(red){本スクリプトにより直接的および間接的障害が生じても一切責任を負いません。};~ &color(red){あらかじめご了承ください。};~ &color(red){自己責任のもとで本資料をご利用ください。}; #contents #htmlinsertpcsp(win-top.html,win-sp.html) * 関連記事 [#h1ac6d6a] -[[PowerShellでパスワードを生成するスクリプト>PowerShell/PowerShellでパスワードを生成するスクリプト]] * 使い方 [#m9ed6dbe] VBSによるパスワード生成スクリプトの使い方を以下に記します。 + ZIPファイルをダウンロードしてください。~ #ref(GenPwd.zip) スクリプトをCopy&Pasteしてファイルを作成してもかまいません。(拡張子はvbsにしてください。) ZIPファイルをダウンロードしてください。~ #br + ZIPファイルを展開すると ''GeneratePassword.vbs'' があります。~ これがパスワード生成VBSスクリプトになります。 + ''GeneratePassword.vbs'' をダブルクリックにて起動します。 パスワードの桁数を入力します。~ デフォルトでは10文字としています。~ キャンセルボタンを押すと終了します。 #ref(01.png) #br + 記号を含むかどうかの問い合わせです。~ 「はい」「いいえ」を選択してください。~ キャンセルボタンを押すと終了します。 #ref(02.png) #br + 記号を含むを選択した場合は、記号の文字数を入力します。~ キャンセルボタンを押すと終了します。 #ref(03.png) #br + 何個パスワードを生成するかの問い合わせが表示されます。 キャンセルボタンを押すと終了します。 #ref(04.png) #br + 作成が完了すると以下のメッセージボックスが表示されます。~ &color(red){生成したパスワード文字列は''クリップボードにコピー''されていますので、他のアプリケーションにPasteしてください。}; #ref(05.png) #br * パスワード生成 VBS スクリプト [#v3df41c3] ' 初期値 WINDOW_TITLE = "パスワード生成" ' ウインドウタイトル DEFAULT_PASSWORD_LENGTH = 10 ' パスワード桁数 DEFAULT_GENERATE_NUMBER_OF_PASSWORD = 1 ' 生成するパスワードの個数 M_ENTER_NUMBER_OF_DIGITS_PASSWORD = "生成するパスワードの桁数を入力してください。" M_IS_INCLUDE_SYMBOLS = "記号を含みますか?" M_ENTER_NUMBER_OF_DIGITS_SYMBOL = "生成するパスワード内に出現する記号数を入力してください。" M_HOW_MANY_GENERATE = "何個のパスワードを生成しますか?" M_GENERATED_PASSWORD = "パスワードが生成されました。" & vbCrLf & vbCrLf &_ "※クリップボードにコピーしてあります。※" & vbCrLf & vbCrLf &_ "生成したパスワードは以下の通りです。" & vbCrLf E_INVALID_VALUE_MESSAGE = "入力された値に誤りがあります。" E_MAX_NUMBER_OF_DIGITS_EXCEEDED_MESSAGE = "最大桁数を超えています。" E_NOT_INTEGER = "整数で入力してください。" ALPHAMERIC_CHARACTERS = "0123456789BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" SYMBOL_CHARACTERS = "' !""#$%&'()*+,-./:;<=>?@A[\]^_`{|}~" ' Program Body START --> nPwdMaxLen = EnterPasswordLength() bIsSymbols = IsIncludeSymbols() nSymbolLen = 0 If bIsSymbols = vbYes Then nSymbolLen = EnterSymbolLength(nPwdMaxLen) End If nGenPwdCnt = HowManyPassword() ' 生成数分ループ szShuffle = "" For j = 1 To nGenPwdCnt ' 生成分ループ szSym = "" szAlphameric = "" If bIsSymbols = vbYes Then szSym = GetSymbols(nSymbolLen) End If szAlphameric = GetRandomAlphameric(nPwdMaxLen - nSymbolLen) ' シャッフルする szShuffle = szShuffle & Shuffle(szSym & szAlphameric) & vbCrLf Next 'WScript.Echo szShuffle ' クリップボードにコピー PutClipboard szShuffle MsgBox M_GENERATED_PASSWORD & vbCrLf & szShuffle, vbInformation, WINDOW_TITLE ' <-- Program Body End ' Function : GetSymbols ' ランダムで記号を指定数分取得する Function Shuffle(str) ReDim pwdAry(Len(str)) For i = 1 To Len(str) ' 配列に展開 pwdAry(i-1) = Mid(str,i,1) Next ' シャッフル For i = 0 To (UBound(pwdAry) -1) Randomize r = Int((UBound(pwdAry)-1) * Rnd) save = pwdAry(i) pwdAry(i) = pwdAry(r) pwdAry(r) = save Next ' 文字列に戻す szShfl = "" For i = 0 To (UBound(pwdAry) -1) szShfl = szShfl & pwdAry(i) Next Shuffle = szShfl End Function ' Function : GetSymbols ' ランダムで記号を指定数分取得する Function GetSymbols(l) sz = "" For i = 1 To l Randomize s = CInt((Len(SYMBOL_CHARACTERS)-1) * Rnd) c = Mid(SYMBOL_CHARACTERS, s+1, 1) sz = sz & c Next GetSymbols = sz End Function ' Function : GetRandomAlphameric ' ランダムで英数字を指定数分取得する Function GetRandomAlphameric(l) sz = "" For i = 1 To l Randomize s = CInt((Len(ALPHAMERIC_CHARACTERS)-1) * Rnd) c = Mid(ALPHAMERIC_CHARACTERS, s+1, 1) sz = sz & c Next GetRandomAlphameric = sz End Function ' Function : EnterPasswordLength ' 生成するパスワードの桁数入力関数 Function EnterPasswordLength() msg = M_ENTER_NUMBER_OF_DIGITS_PASSWORD pwdlen = DEFAULT_PASSWORD_LENGTH Do While True n = InputBox(msg, WINDOW_TITLE,pwdlen) If n = False Then ' Click Cancel Butotn WScript.Quit End If If IsNumeric(n) Then If IsInteger(n) Then n = CInt(n) If n <= 0 Then msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_PASSWORD Else Exit Do End If Else msg = E_NOT_INTEGER & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_PASSWORD End If Else msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_PASSWORD End If pwdLen = "" Loop EnterPasswordLength = n End Function ' Function : EnterPasswordLength ' 記号を含むかどうか問い合わせる関数 Function IsIncludeSymbols() yesno = MsgBox(M_IS_INCLUDE_SYMBOLS, vbYesNoCancel + vbQuestion, WINDOW_TITLE) If yesno = vbCancel Then WScript.Quit End If IsIncludeSymbols = yesno End Function ' Function : EnterSymbolLength ' 記号を含むかどうか問い合わせる関数 Function EnterSymbolLength(nMaxLen) msg = M_ENTER_NUMBER_OF_DIGITS_SYMBOL Do While True n = InputBox(msg, WINDOW_TITLE) If n = False Then ' Click Cancel Butotn WScript.Quit End If If IsNumeric(n) Then If IsInteger(n) Then n = CInt(n) If nMaxLen < n Then msg = E_MAX_NUMBER_OF_DIGITS_EXCEEDED_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_SYMBOL Else If n <= 0 Then msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_SYMBOL Else Exit Do End If End If Else msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_PASSWORD End If Else msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_SYMBOL End If Loop EnterSymbolLength = n End Function ' Function : HowManyPassword ' 記号を含むかどうか問い合わせる関数 Function HowManyPassword() msg = M_HOW_MANY_GENERATE count = DEFAULT_GENERATE_NUMBER_OF_PASSWORD Do While True n = InputBox(msg, WINDOW_TITLE,count) If n = False Then ' Click Cancel Butotn WScript.Quit End If If IsNumeric(n) Then If IsInteger(n) Then n = CInt(n) If n <= 0 Then msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_HOW_MANY_GENERATE Else Exit Do End If Else msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_HOW_MANY_GENERATE End If Else msg = E_NOT_INTEGER & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_SYMBOL End If Loop HowManyPassword = n End Function ' Function : IsInteger ' 整数? Function IsInteger(v) d = CDbl(v) i = CInt(v) r = False If d = i Then r = True End If IsInteger = r End Function ' Function : PutClipboard(str) ' クリップボードにセットする Sub PutClipboard(str) Set o = CreateObject("WScript.Shell") o.Exec("clip").StdIn.Write str Set o = Nothing End Sub 以上、VBScriptによるパスワード生成スクリプトの紹介でした。 #htmlinsertpcsp(win-btm.html,win-sp.html)