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!