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