Szél Péter

Gyakran van szükség egy adott hosszúságú random stringre, például új jelszó létrehozásakor, vagy egy adott programrész teszteléséhez, ha azt szeretnénk kipróbálni, hogy az adott funkció helyesen működik-e adott hosszúságú bemenő paraméter esetén. Ilyenkor jön jól, ha van egy gyors kis scriptünk random string generálására.

Szerencsére nagyon egyszerűen lehet Powershellben megoldani ezt a feladatot, ráadásul, ha szeretnénk, akkor felvehetjük függvényként is, így a későbbiekben könnyen elérhetővé válik.

Íme a teljes script:

(0..255 | % { [char[]](48..57 + 97..122) | Get-Random }) -join '' 

Oké, így első ránézésre nem feltétlenül az egyszerűség jut az eszembe, felbontom részeire, hogy érthető legyen, mi is történik:

1. Tömb generálása számtartományból:

0..255  

Egy 256 elemű tömböt hoz létre, amely 0-tól 255-ig tartalmazza az egész számokat.

2. Karaktertömbbé konvertálás

[char[]](48..57 + 97..122)

Így lesz egy tömböm, amely ASCII karaktereket tartalmazza 0-tól 9-ig, valamint az ABC kisbetűit a-tól z-ig.

3. Véletlenszerű választás a tömbből

$array | Get-Random

Az előbbi utasítás egyetlen elemet választ az $array nevű tömbből.

Ennek megfelelően a

[char[]](48..57 + 97..122) | Get-Random

Egy elemet választ véletlenszerűen az ABC kisbetűit és számjegyeket tartalmazó tömbünkből.

4. Ismételni n-szer

0..255 | % {  }  

A kapcsos zárójelek közötti utasítást hajtja végre 256-szor. Persze használható a hagyományos for ciklus is, így talán egyszerűbb leírni, ízlés kérdése.

(A % jel a ForEach kulcsszó rövidítése.)

A scriptünkben tehát 256-szor választunk egy random stringet az ABC kisbetűiből és a számjegyekből.

5. Tömb elemeinek összefűzése stringgé

$array -join '-'

A -join kulcsszó összefűzi a tömb elemeit egyetlen striggé a paraméterként megadott karakterrel kapcsolva. Például:

'a','b','c' -join '-'  
>> "a-b-c"

Tehát végezetül az előző pontban megkapott, véletlenszerűen választott betűkből és számokból álló tömböt összefűzzük egyetlen stringgé, megkapva az áhított végeredményt.

6. Függvénybe mentés

Meg kell nyitni a profile scriptet szerkesztésre, ezt legegyszerűbben az alábbi PS utasítással teheted meg:

notepad $profile  

(A $profile script lefut minden egyes Powershell indításnál, így ide írhatod be az újrafelhasználásra szánt függvényeidet és aliasaidat)

Ha még nincs profile scripted, akkor az alábbi hibát fogod kapni:

Az alábbi utasítással tudod legegyszerűbben létrehozni:

New-Item $profile -Type file -Force  

Ezek után már megtudod nyitni notepad-ben a profile file-t.

Megnyílik a notepad alkalmazás, ahova másold be a fent megismert scriptet függvénybe ágyazva:

function rnd($len) {  
    (1..$len | % { [char[]](48..57 + 97..122) | Get-Random }) -join ''
}

Következő Powershell megnyitástól kezdve bármikor kiadva a

rnd 10  

utasítást, tetszőleges hosszú stringet generáltathatsz egyszerűen.

(Figyelj oda, hogy a Execution Policy helyesen legyen beállítva, alapértelmezett esetben le van tiltva a script futtatás ("Restricted").)

+1 Bónusz: másolás egyből vágólapra

A clip.exe segítségével bármit könnyen és gyorsan a vágólapra másolhatunk Powershellből:

rnd 10 | clip  

És már a vágólapon is van a 10 hosszú véletlenszerű string, készen áll arra, hogy beillesszem a jelszó mezőbe, vagy a tesztelendő űrlapmezőbe.

Ha tetszett a bejegyzés, mások számára is hasznos lehet, akkor oszd meg az alábbi gombok segítségével!