PowerShell:
乱数の生成

方法:

PowerShellでは、Get-Random コマンドレットを使用して乱数を簡単に生成できます。このコマンドレットは、デフォルトの範囲または指定された範囲内で乱数を生成することができます。

# 0からInt32.MaxValueまでの間の乱数を生成
$randomNumber = Get-Random
Write-Output $randomNumber

範囲を指定するには、-Minimum-Maximum パラメーターを使用します:

# 1から100までの間の乱数を生成
$randomNumber = Get-Random -Minimum 1 -Maximum 101
Write-Output $randomNumber

より細かい制御が必要な場合は、System.Random クラスのオブジェクトをインスタンス化できます:

# 数列のために System.Random を使用
$rand = New-Object System.Random
foreach ($i in 1..5) {
    $randomNumber = $rand.Next(1, 101)
    Write-Output $randomNumber
}

配列やコレクションからランダムな選択が必要な場合、Get-Random は直接アイテムを選ぶことができます:

# 配列からのランダムな選択
$array = 1..10
$randomItem = Get-Random -InputObject $array
Write-Output $randomItem

詳細解説

PowerShellの Get-Random コマンドレットは、基盤となる.NET クラス System.Random を利用して疑似乱数を生成します。これらは「疑似」であるため、ランダムであると見せかける数列を生成するアルゴリズムを使用します。ほとんどのアプリケーションにおいて、このレベルのランダム性で十分です。しかし、暗号学的セキュリティを必要とする用途では、System.Random はその予測可能な性質のため不適切です。

PowerShellと.NETは、暗号化キー生成やその他のセキュリティに敏感な操作に適したより安全な System.Security.Cryptography.RNGCryptoServiceProvider を提供しています:

# 暗号学的に安全な乱数
$rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::new()
$bytes = New-Object byte[] 4
$rng.GetBytes($bytes)
$randomNumber = [BitConverter]::ToInt32($bytes, 0)
Write-Output $randomNumber

Get-RandomSystem.Random はスクリプティングやアプリケーションロジックのためのランダム性の広範なニーズを満たしていますが、予測可能性が脆弱性を生じさせうるセキュリティ中心のアプリケーションでは、適切なツールを選択することが不可欠です。