Génération de nombres aléatoires

PowerShell:
Génération de nombres aléatoires

Comment faire :

PowerShell offre une approche simple pour générer des nombres aléatoires à l’aide de l’applet de commande Get-Random. Cette applet de commande peut produire des nombres aléatoires dans une plage par défaut ou une plage spécifiée.

# Générer un nombre aléatoire entre 0 et Int32.MaxValue
$randomNumber = Get-Random
Write-Output $randomNumber

Pour spécifier une plage, utilisez les paramètres -Minimum et -Maximum :

# Générer un nombre aléatoire entre 1 et 100
$randomNumber = Get-Random -Minimum 1 -Maximum 101
Write-Output $randomNumber

Pour plus de contrôle, vous pouvez instancier un objet de la classe System.Random :

# Utiliser System.Random pour une séquence de nombres
$rand = New-Object System.Random
foreach ($i in 1..5) {
    $randomNumber = $rand.Next(1, 101)
    Write-Output $randomNumber
}

Si vous avez besoin d’une sélection aléatoire à partir d’un tableau ou d’une collection, Get-Random peut directement choisir un élément :

# Sélection aléatoire à partir d'un tableau
$array = 1..10
$randomItem = Get-Random -InputObject $array
Write-Output $randomItem

Plongée en profondeur

L’applet de commande Get-Random dans PowerShell utilise sous le capot la classe .NET System.Random pour générer des nombres pseudoaléatoires. Ce sont des “pseudo” car ils utilisent des algorithmes pour produire des séquences de nombres qui semblent seulement aléatoires. Pour la plupart des applications, ce niveau d’aléatoire est suffisant. Cependant, pour les cas d’utilisation nécessitant une sécurité cryptographique, System.Random n’est pas adapté en raison de sa nature prévisible.

PowerShell et .NET offrent System.Security.Cryptography.RNGCryptoServiceProvider pour l’aléatoire cryptographique, qui est plus approprié pour générer des clés de chiffrement ou d’autres opérations sensibles à la sécurité :

# Nombres aléatoires cryptographiquement sécurisés
$rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::new()
$bytes = New-Object byte[] 4
$rng.GetBytes($bytes)
$randomNumber = [BitConverter]::ToInt32($bytes, 0)
Write-Output $randomNumber

Bien que Get-Random et System.Random répondent à un large éventail de besoins en matière d’aléatoire dans les scripts et la logique des applications, il est essentiel de choisir l’outil adéquat pour le travail, en particulier dans les applications centrées sur la sécurité où la prévisibilité peut représenter une vulnérabilité.