2010年12月14日火曜日

◆ランダムなパスワードを作る(Get-Random)

以下のTipsでランダムなパスワードの作り方のサンプルがあったので紹介しておく。

Create Random Passwords - Power Tips - Powershell.com Powershell Scripts, Tips and Resources

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022

<#
.SYNOPSIS
    ランダムなパスワードを作る
.DESCRIPTION
    パスワードに使う文字列と長さを指定するとランダムなパスワードを(文字列)を返す。
.LINK
    http://powershell.com/cs/blogs/tips/archive/2010/12/13/create-random-passwords.aspx
.NOTES
    デフォルトでは10桁のパスワードを返す。(紛らわしいのでゼロとオーは使わない)
.EXAMPLE
    mGet-RandomPassword.ps1 -length 7 -char 'abcdefghijklmnopqrstuvwxyz0123456789'
#>
 
param( 
$length = 10, 
$characters = 
'abcdefghkmnprstuvwxyzABCDEFGHKLMNPRSTUVWXYZ123456789!"$%&/()=?*+#_'
 
 
#[string][char[]](33..47+49..78+80..110+112..126)
) 
# select random characters
$random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length } 
# output random pwd
[String]$characters
[$random] 

すこし解説すると、まずパスワードに使える文字列と桁数を定義する。
Get-Randomを使ってパスワードの桁数分の文字列(配列)の添字を創りだして$randomに配列で入れる。
その配列が指し示す文字を$charactersから抜き出しStringに変換して返す。
これで、都度$charactersに定義した文字列から$lengthで指定した個数の文字をランダムに抜き出したパスワードが出来上がる。

※記号などは使えない文字もあるかもしれないので適宜カスタマイズ。

2 件のコメント:

  1. Windows Server 2012 R2 からか、Stringにキャストしたときにすべての文字列間に半角スペースが入ってしまうようです。

    例:
    [string][char[]]"test"
    t e s t

    返信削除
  2. コメントありがとうございます。

    多分もともとそのような動作のような気がします。

    実際に使うには最後のところで、
    -join $characters[$random]
    としたほうが良いのかもしれませんね。

    返信削除