Véletlen szám generálás és annál sokkal több (Get-Random)

A PowerShell 1.0 verziójában nem volt véletlen szám generátor, de nagyon egyszerűen segítségül lehetett hívni a system.random .NET osztályt és azzal tudtunk véletlen számot generálni. Gondoltam, hogy azért illene ilyen cmdletet belerakni a következő verzióba, de hogy ilyen sokat ki lehet hozni egy véletlen szám generátor cmdletből, arra nem számítottam. Nézzük sorjában, mit tud ez a get-random  cmdlet!

[1] PS C:\> get-random

887627512

[2] PS C:\> Get-Random 100

55

[3] PS C:\> Get-Random -Minimum 50 -Maximum 100

70

[4] PS C:\> Get-Random 0.999999999999999

0,568479508426263

Az [1]-es sorban láthatjuk a legegyszerűbb alapesetet, a get-random paraméter nélkül. Ilyenkor egy 0 és [int32]::maxvalue, azaz 2147483647 közötti egész számot kapunk eredményül. A [2]-es sorban 0 és 100 közötti véletlen számot kapunk, látható, hogy a maximum érték a pozícionális paraméter. A [3]-as sorban 50 és 100 közötti véletlen számot kapunk, ha valamelyik határérték nem egész, akkor lebegőpontos számot kapunk, mint ahogy a [4]-es sorban látható.

És most jön az igazán érdekes!

[29] PS C:\> "Aladár", "Bence", "Csaba", "Dénes", "Ferenc", "Hugó", "Istvá

n" | Get-Random -Count 3

István

Csaba

Bence

Csövezhető tehát a get-random, ilyenkor a –count paramétert kell használni, ami megadja, hogy a gyűjteményből hány elemet adjon vissza! Ez un. „nem visszatevéses” kiválasztás, azaz egy elem csak egyszer kerülhet bele a kiválasztásba. Ha a –count értéke megegyezik vagy több, mint a csőelemek száma, akkor az összes elemet visszakapjuk, csak véletlen sorrendben:

[30] PS C:\> "Aladár", "Bence", "Csaba", "Dénes", "Ferenc", "Hugó", "Istvá

n" | Get-Random -Count 7

Hugó

Bence

Ferenc

Dénes

Aladár

István

Csaba

Mire lehet használni egy ilyen cmdletet? Természetesen a véletlen számok generálása elsősorban a játékoknál és különböző algoritmusok tesztelésénél jönnek jól, ezekre a PowerShellben talán kevesebbet van szükség, viszont ez a csövezhetőség nagyon jól jön szkriptjeink tesztelésénél! Gondoljunk valamilyen fájlfeldolgozó szkriptre. Valószínű a tesztelés fázisában nem akarjuk nagyon sok fájlra ráereszteni, viszont az sem lenne jó, ha mindig ugyanazzal a 2 fájllal tesztelnénk. Ilyenkor a fájlok egy nagy halmazából véletlenül választunk ki néhányat és azzal tesztelünk.

Vagy pl. sokkal olcsóbb lenne a pörgő golyók helyett ezzel lottószámokat generálni hétről hétre:

[32] PS C:\> 1..90 | Get-Random -Count 5 | Sort-Object

12

15

23

65

80

Sok szerencsét! J



Word To HTML Converter