Generierung von Zufallszahlen

PowerShell:
Generierung von Zufallszahlen

Wie geht das:

PowerShell bietet einen unkomplizierten Ansatz, um Zufallszahlen mit dem Cmdlet Get-Random zu generieren. Dieses Cmdlet kann Zufallszahlen in einem Standardbereich oder einem bestimmten Bereich produzieren.

# Erzeugt eine Zufallszahl zwischen 0 und Int32.MaxValue
$randomNumber = Get-Random
Write-Output $randomNumber

Um einen Bereich anzugeben, verwenden Sie die Parameter -Minimum und -Maximum:

# Erzeugt eine Zufallszahl zwischen 1 und 100
$randomNumber = Get-Random -Minimum 1 -Maximum 101
Write-Output $randomNumber

Für mehr Kontrolle können Sie ein Objekt der System.Random-Klasse erstellen:

# Verwendung von System.Random für eine Reihe von Zahlen
$rand = New-Object System.Random
foreach ($i in 1..5) {
    $randomNumber = $rand.Next(1, 101)
    Write-Output $randomNumber
}

Wenn Sie eine zufällige Auswahl aus einem Array oder einer Sammlung benötigen, kann Get-Random direkt ein Element auswählen:

# Zufällige Auswahl aus einem Array
$array = 1..10
$randomItem = Get-Random -InputObject $array
Write-Output $randomItem

Tiefergehende Betrachtung

Das Cmdlet Get-Random in PowerShell nutzt unter der Haube die .NET-Klasse System.Random, um pseudozufällige Zahlen zu erzeugen. Diese sind “pseudo”, weil sie Algorithmen verwenden, um Sequenzen von Zahlen zu produzieren, die nur scheinbar zufällig sind. Für die meisten Anwendungen ist dieses Maß an Zufälligkeit ausreichend. Allerdings ist System.Random für Anwendungsfälle, die kryptografische Sicherheit erfordern, aufgrund seiner vorhersehbaren Natur nicht geeignet.

PowerShell und .NET bieten System.Security.Cryptography.RNGCryptoServiceProvider für kryptographische Zufälligkeit an, der für die Generierung von Verschlüsselungsschlüsseln oder andere sicherheitskritische Operationen geeigneter ist:

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

Während Get-Random und System.Random eine breite Palette von Bedürfnissen nach Zufälligkeit in Skripting und Anwendungslogik erfüllen, ist es wesentlich, das richtige Werkzeug für den Job auszuwählen, insbesondere in sicherheitszentrierten Anwendungen, wo Vorhersehbarkeit eine Schwachstelle darstellen kann.