PowerShell:
גילוי מספרים אקראיים
איך לעשות:
PowerShell מציע גישה ישירה ליצירת מספרים אקראיים באמצעות ה-cmdlet 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
צלילה עמוקה
ה-cmdlet 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
מספקים פתרון לצורך רחב באקראיות בכתיבת סקריפטים ולוגיקת יישומים, חשוב לבחור את הכלי הנכון למשימה, במיוחד ביישומים בעלי אוריינטציה אבטחתית שבהם ניבוי יכול להוות פגיעות.