パスワード用乱数生成バッチ(数、英数、英数記号選択可能)

バッチとは言ったもののpowershellを呼んでるのでバッチと言っていいものなのか…

@echo off
set /p length=文字数:
set /p ask=1=数、3=英数、4=英数記号:
powershell -NoProfile -ExecutionPolicy Unrestricted -Command "& { switch ("%ask%") {"1" {$characters='123456789'}"3" {$characters='abcdefghkmnprstuvwxyzABCDEFGHKLMNPRSTUVWXYZ123456789'}"4" {$characters='abcdefghkmnprstuvwxyzABCDEFGHKLMNPRSTUVWXYZ123456789!$^&/()=?*+#_'}}; -join ${characters}[(1..%length% | ForEach-Object { Get-Random -Maximum ${characters}.length })] }"
pause

文字数はint32の最大値まで。
1=数字のみの乱数、3=英数の乱数、4=英数記号の乱数となっている。