Генерация случайных чисел

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

Глубокое погружение

Командлет Get-Random в PowerShell использует под капотом класс .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 удовлетворяют широкому набору потребностей в случайности при написании скриптов и логике приложений, важно выбирать правильный инструмент для работы, особенно в приложениях, ориентированных на безопасность, где предсказуемость может представлять уязвимость.