Generowanie liczb losowych

PowerShell:
Generowanie liczb losowych

Jak:

PowerShell oferuje prostą metodę generowania losowych liczb za pomocą cmdletu Get-Random. Ten cmdlet może produkować losowe liczby w domyślnym zakresie lub określonym zakresie.

# Generowanie losowej liczby między 0 a Int32.MaxValue
$randomNumber = Get-Random
Write-Output $randomNumber

Aby określić zakres, użyj parametrów -Minimum i -Maximum:

# Generowanie losowej liczby między 1 a 100
$randomNumber = Get-Random -Minimum 1 -Maximum 101
Write-Output $randomNumber

Dla większej kontroli, możesz utworzyć obiekt klasy System.Random:

# Używanie System.Random do sekwencji numerów
$rand = New-Object System.Random
foreach ($i in 1..5) {
    $randomNumber = $rand.Next(1, 101)
    Write-Output $randomNumber
}

Jeśli potrzebujesz losowego wyboru z tablicy lub kolekcji, Get-Random może bezpośrednio wybrać element:

# Losowy wybór z tablicy
$array = 1..10
$randomItem = Get-Random -InputObject $array
Write-Output $randomItem

Szczegółowa analiza

Cmdlet Get-Random w PowerShellu wykorzystuje klasę .NET System.Random, aby generować pseudolosowe liczby. Są one “pseudo”, ponieważ używają algorytmów do produkcji sekwencji liczb, które tylko wyglądają na losowe. Dla większości aplikacji, ten poziom losowości jest wystarczający. Jednakże, dla przypadków użycia wymagających kryptograficznego bezpieczeństwa, System.Random nie jest odpowiedni ze względu na jego przewidywalną naturę.

PowerShell i .NET oferują System.Security.Cryptography.RNGCryptoServiceProvider dla kryptograficznej losowości, co jest bardziej odpowiednie do generowania kluczy szyfrowania lub innych operacji wrażliwych na bezpieczeństwo:

# Kryptograficznie bezpieczne losowe liczby
$rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::new()
$bytes = New-Object byte[] 4
$rng.GetBytes($bytes)
$randomNumber = [BitConverter]::ToInt32($bytes, 0)
Write-Output $randomNumber

Podczas gdy Get-Random i System.Random zaspokajają szeroki zestaw potrzeb związanych z losowością w skryptach i logice aplikacji, istotne jest wybranie odpowiedniego narzędzia do pracy, szczególnie w aplikacjach skoncentrowanych na bezpieczeństwie, gdzie przewidywalność może stanowić podatność.