Windowsバッチ(.bat)でパスワード生成する

概要

素のwindowsパソコンでパスワード生成したい瞬間がありませんか。私はありました。
でもcmdというか.batだけではどうにもならなかったのでタイトルに反してWHS JScriptも使っています。

JScript(ジェイスクリプト)はECMAScript3に準拠しているらしいので、2011年頃のちょっと古いJavaScriptが素のwindowsで使えるそうです。なんだか夢が広がりますね。(ECMAScript3というと、Adobe ExtendScriptとかと同じかな…)

参考

JavaScriptでパスワードを自動生成するサンプル
パスワード関連の記事が続きましたので、ついでにJavaScriptでパスワードを生成する方法について記事にしたいと思います。 パスワードに限らず、ユーザー識別のために一時的なIDを生成したりするとき
WSH JScriptを使いこなそう 〜結果の出力方法〜
JScript VBScript バッチ WSH

コード

今回はgetPasswd.batとpasswd.jsという2つのテキストファイルを作成して使います。
頑張ればbat内でpasswd.jsにコードを書き込んだのち実行して削除、結果だけ表示みたいなことができるはずですが、面倒なのでしません。

getPasswd.bat

getPasswd.batファイルを作成して下記を記入します。エンコードはマルチバイト文字を扱うならどちらもshift-jisにしたほうがよいです。
内容的にはJScriptでパスワードを作成する部分を動かして結果だけ取得しています。


REM 自動でクリップボードにコピーしたい場合は下記と差し替える
REM cscript /nologo passwd.js | clip

REM コマンドプロンプトに生成したパスワードを表示させる
cscript /nologo passwd.js

PAUSE

passwd.js

passwd.jsというファイルを作成して下記のコードを記入し保存します。

古いjsしか使えないため、letとかconstは使うとエラーになるので、変数は全部varで宣言しています。
MDNには「Math.random() の提供する乱数は、暗号に使用可能な安全性を備えていません。セキュリティに関連する目的では使用しないでください。」とあるので、本当はパスワードに使用するのはよくないと思うのですが、とにかくランダムな英数字がほしかったので…。

var password_base = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
function genPassword(length)
{
	var password = '';
	for (var i = 0; i < length; i++) {
		password += password_base.charAt(Math.floor(Math.random() * password_base.length));
	}
	return password;
}

// 13文字のパスワードにする
var len = 13;

// WScript.echoとするとコマンドプロンプトに表示される
WScript.echo(genPassword(len));

使い方

getPasswd.batとpasswd.jsを同じ階層に置き、getPasswd.batを実行すると下記のような文章が出てきてパスワードが生成されます。
「AYtJleIjms4o7」の部分がそうです。
選択して右クリックすると勝手にコピーされます。


C:\Users\>REM クリップボードにコピー

C:\Users\>REM cscript /nologo passwd.js | clip

C:\Users\>cscript /nologo passwd.js
AYtJleIjms4o7

C:\Users\>PAUSE
Press any key to continue . . .

おわり。