#author("2018-08-28T23:10:48+09:00","","")
#author("2018-08-28T23:11:24+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]
パスワードに半角スペースを含ませたくない場合は、SYMBOL_CHARACTERS変数から半角スペースを削除してください。
&color(red){''パスワードに半角スペースを含ませたくない場合は、SYMBOL_CHARACTERS変数から半角スペースを削除してください。''};
 ' 初期値
 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)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS