- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2018-08-19T15:23:23+09:00","","")
* VBScriptでランダムなパスワードを生成するスクリプトの公開 [#s44493fb]
#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)