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