PowerShell:
生成随机数
如何操作:
PowerShell 提供了一种简单的方法来使用 Get-Random
cmdlet 生成随机数。这个 cmdlet 可以在默认范围内或指定范围内产生随机数。
# 生成一个介于 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
cmdlet 利用 .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-Random
和 System.Random
满足了脚本和应用逻辑随机性的广泛需求,但在安全为中心的应用程序中特别需要选择合适的工具,因为可预测性可能呈现出脆弱性。