Hogyan generáljuk a véletlenszerű neveket és telefonszámokat a PowerShell segítségével

Tartalomjegyzék:

Hogyan generáljuk a véletlenszerű neveket és telefonszámokat a PowerShell segítségével
Hogyan generáljuk a véletlenszerű neveket és telefonszámokat a PowerShell segítségével

Videó: Hogyan generáljuk a véletlenszerű neveket és telefonszámokat a PowerShell segítségével

Videó: Hogyan generáljuk a véletlenszerű neveket és telefonszámokat a PowerShell segítségével
Videó: Comparing Windows 11 vs Windows Server 2022 - YouTube 2024, November
Anonim
Ha tesztelésre vagy bemutatásra van szükség egy adatkészlethez, és a készletnek személyazonosításra alkalmas információkat (PII) kell tartalmaznia, általában nem szeretné használni a valódi adatokat képviselõ valós adatokat. Itt meglátogatjuk, hogyan használhatja a PowerShell-et, hogy létrehozzon egy véletlenszerű neveket és telefonszámokat egy ilyen alkalomra.
Ha tesztelésre vagy bemutatásra van szükség egy adatkészlethez, és a készletnek személyazonosításra alkalmas információkat (PII) kell tartalmaznia, általában nem szeretné használni a valódi adatokat képviselõ valós adatokat. Itt meglátogatjuk, hogyan használhatja a PowerShell-et, hogy létrehozzon egy véletlenszerű neveket és telefonszámokat egy ilyen alkalomra.

Amire szükséged van

Mielőtt elkezdené a munkát, néhány eszközzel és információval rendelkeznie kell:

PowerShell

Ezt a szkriptet a PowerShell 4.0 alkalmazásával fejlesztették ki, és a PowerShell 2.0 kompatibilitással is tesztelték. A PowerShell 2.0 vagy újabb verzió Windows 7 óta telepítve van a Windows rendszerre. Windows XP és Vista is elérhető a Windows Management Framework (WMF) részeként. További részletek és letöltési linkek találhatók.

  • A PowerShell 2.0 Windows 7 operációs rendszerrel érkezik. A Windows XP SP3 és Vista (SP1 vagy újabb) felhasználók letölthetik a Microsoft WMF verzióját a KB968929-es verzióban. Nem támogatott az XP SP2 vagy az alatt, vagy Vista nélkül SP1.
  • A PowerShell 4.0 a Windows 8.1 operációs rendszerrel együtt érkezik. A Windows 7 SP1 felhasználók frissíthetik a frissítést a Microsoft letöltőközpontjából származó WMF frissítés részeként. Nem érhető el XP vagy Vista.

nevek

Szükséged lesz néhány névlistára, amelyek betáplálhatók a véletlen generátorba. Nagyszerű forrás a sok a nevekről és a népszerűségükről (bár ez nem használható erre a forgatókönyvre), az Egyesült Államok Népszámlálási Hivatala. Az alábbi linkeken elérhető listák nagyon nagyok, ezért kicsit lecsökkentheted őket, ha egyidejűleg sok nevet és számot generálsz. A tesztrendszerünkön minden név / számpár kb. 1,5 másodpercet vett igénybe a teljes listák használatával, de a futásteljesítmény függ a saját rendszerspecifikációktól.

  • vezetéknevek
  • Férfi első nevek
  • Női elnevezések

A használt forrástól függetlenül három szöveges fájlt kell generálnia, amelyeket a szkript a névválasztás során használhat. Minden fájlnak csak neveket kell tartalmaznia, és soronként csak egy nevet kell megadnia. Ezeket ugyanabban a mappában kell tárolni, mint a PowerShell parancsfájl.

Surnames.txt meg kell adnia a vezetékneveket, ahová a szkriptet ki szeretné választani. Példa:

Smith Johnson Williams Jones Brown

Males.txt tartalmaznia kell a férfi első nevét, ahová a szkriptet ki szeretné választani. Példa:

James John Robert Michael William

Females.txt tartalmaznia kell a női előneveket, ahová a szkriptet ki szeretné választani. Példa:

Mary Patricia Linda Barbara Elizabeth

A telefonszámok szabályai

Ha biztos akar lenni abban, hogy telefonszámai nem egyeznek valaki valódi telefonszámával, a legegyszerűbb módja a jól ismert "555" Exchange kód használata. De ha sok telefonszámmal fogsz megjeleníteni egy adathalmazt, akkor az 555 eléggé monotonnak tűnik. A dolgok érdekesebbé tétele érdekében további telefonszámokat generálunk, amelyek sértik az észak-amerikai számozási tervet (NANP). Az alábbiakban néhány minta érvénytelen telefonszámot tartalmaz, amelyek a forgatókönyv által generált számok mindegyikét képviselik:

  • (157) 836-8167 Ez a szám érvénytelen, mivel a körzetkódok nem kezdődhetnek 1 vagy 0-mal.
  • (298) 731-6185 Ez a szám érvénytelen, mert a NANP nem adja meg a körzetszámokat a 9-es számmal a második számjegyként.
  • (678) 035-7598 Ez a szám érvénytelen, mert az Exchange kódok nem kezdődhetnek 1 vagy 0-mal.
  • (752) 811-1375 Ez a szám érvénytelen, mert az Exchange kódok nem fejezhetnek be két 1-tel.
  • (265) 555-0128 Ez a szám érvénytelen, mert az Exchange kódja 555, és az Előfizetői azonosító a fiktív számokra fenntartott tartományon belül van.
  • (800) 555-0199 Ez a szám az egyetlen 800 szám, 555 Exchange kóddal, amelyet fiktív számként használnak.

Ne feledje, hogy a fenti szabályok változhatnak, és joghatóságonként eltérhetnek. Meg kell tennie a saját kutatást, hogy ellenőrizze az aktuális szabályokat, amelyek az adott helyszínre vonatkoznak, amelyhez telefonszámot generál.

Közös parancsok

Vannak olyan meglehetősen gyakori parancsok, amelyeket a jelen szkript alatt használnak, ezért meg kell kapnunk egy alapötletet, hogy mit jelentenek, mielőtt merülnénk a valóban írásba.

  • Foreach-Object egy objektum tömböt vagy listát vesz, és mindegyikre végrehajtja a megadott műveletet. A ForEach-Object parancsfájlblokkon belül a $ _ változó az aktuálisan feldolgozott elemre utal.
  • ha más kimutatások lehetővé teszik, hogy csak bizonyos feltételek teljesülése esetén végezzen műveletet, és (adott esetben) határozza meg, hogy mit kell tenni, ha ez a feltétel nem teljesül.
  • kapcsoló a kijelentések olyanok, mintha több választást tartalmazó állítások lennének. A kapcsoló ellenőrizni fogja az objektumot több körülmény között, és futtathatja a szkriptblokkokat, amelyek az objektumokkal megegyeznek. Opcionálisan megadhat egy alapértelmezett blokkot is, amely csak akkor fut, ha nincs más feltétel. A kapcsoló kijelenti a $ _ változót is, hogy az aktuálisan feldolgozandó elemre hivatkozzon.
  • míg kimutatások lehetővé teszik, hogy folyamatosan ismételje meg a szkriptblokkot, amíg egy bizonyos feltétel teljesül. Ha valami történik, ami azt eredményezi, hogy az állapot többé nem lesz igaz, amikor a parancsfájl befejeződött, a hurok kilép.
  • próbáld … elkapni kimutatások segítenek a hibakezelésben. Ha valami meghiúsul a próbálkozáshoz megadott parancsfájllal, akkor a fogási blokk fut.
  • Get-Content amit az ónról mond.Megkapja a megadott objektum tartalmát - általában egy fájlt. Ezt felhasználhatja egy szövegfájl tartalmának megjelenítéséhez a konzolon, vagy - mint ebben a szkriptben - adja át a csővezeték tartalmát más parancsokkal együtt.
  • Write-Host tesz a cuccot a konzolba. Ezzel üzeneteket jeleníthet meg a felhasználónak, és nem szerepel a parancsfájl kimenetében, ha a kimenet átirányításra kerül.
  • Write-Output valójában kimenetet generál. Ez általában a konzolba kerül, de más parancsok is átirányíthatók.

A parancsfájlban vannak más parancsok is, de elmagyarázzuk ezeket, ahogy haladunk.

A szkript létrehozása

Most itt az ideje, hogy piszkos kezünket kapjuk.

1. rész: Elkészületek készítése

Ha tetszik a forgatókönyve, hogy elinduljon egy tiszta konzolról, itt van az első vonal, amelyet szeretne benne.

Clear-Host

Most, hogy van egy tiszta képernyőnk, a következő dolog, amit meg akarunk tenni, a szkript ellenőrzése, hogy megbizonyosodjunk róla, hogy minden, amire szüksége van, a helyén van. Ehhez meg kell kezdeni, hogy megmondjuk, hol kell keresni, és mit keres.

$ScriptFolder = Split-Path $MyInvocation.MyCommand.Definition -Parent $RequiredFiles = ('Males.txt','Females.txt','Surnames.txt')

Az első sor nagyon hasznos minden szkript számára. Meghatároz egy változót, amely a szkriptet tartalmazó mappára mutat. Ez alapvető fontosságú, ha a szkripthez olyan más fájlok szükségesek, amelyek ugyanabban a könyvtárban találhatók, mint maga (vagy egy ismert relatív útvonal ebből a könyvtárból), mert egyébként hibákat tapasztal, ha és amikor megpróbálja futtatni a szkriptet, amíg másik munkakönyvtár.

A második sor olyan fájlneveket hoz létre, amelyek szükségesek ahhoz, hogy a szkript megfelelően működjön. Ezt a $ ScriptFolder változóval együtt használjuk a következő részben, ahol ellenőrizzük, hogy ezek a fájlok jelen vannak-e.

$RequiredFiles | ForEach-Object { if (!(Test-Path '$ScriptFolder$_')) { Write-Host '$_ not found.' -ForegroundColor Red $MissingFiles++ } }

Ez a parancsfájl darabja elküldi a $ RequiredFiles tömböt egy ForEach objektumblokkba. Ebben a szkriptblokkban az if utasítás használja a Test-ösvényt, hogy megnézze, hogy a keresett fájl hol található. A Test-Path egy egyszerű parancs, amely egy fájl elérési útján megad egy alapvető igaz vagy hamis választ, hogy elmondja nekünk, hogy az út valami létezőt mutat. A felkiáltójel a nem operátor, amely megfordítja a Test-Path válaszát, mielőtt átadná az if utasításnak. Tehát ha a Test-Path hamis (vagyis a keresett fájl nem létezik), akkor a program át fogja alakítani, hogy az if utasítás végrehajtsa a parancsfájl blokkot.

Egy másik megjegyzés itt, amelyet gyakran használnak ebben a szkriptben, a kettős idézetek használata az egyszeri idézetek helyett. Ha valamit idézőjelekbe teszel, a PowerShell statikus karakterláncként kezeli. Bármi is van az egyetlen idézőjelben, pontosan ugyanolyan lesz. A kettős idézőjelek azt mondják a PowerShellnek, hogy lefordítja a változókat és néhány más speciális elemet a stringen belül, mielőtt átmegy. Itt a kettős idézetek azt jelentik, hogy a futás helyett Test-Path '$ ScriptFolder $ _' mi valójában valami mást csinálunk "C: Scripts Surnames.txt" tesztpálya (feltéve, hogy a parancsfájl a C: Scripts fájlban van, és a ForEach-Object jelenleg a 'Surnames.txt' fájlban dolgozik).

Minden egyes nem talált fájl esetében a Write-Host hibaüzenetet küld pirosan, hogy megmondja, melyik fájl hiányzik. Ezután megnöveli a $ MissingFiles változót, amelyet a következő munkanapon fogja használni, hiba esetén és a hiányzó fájl hiányában.

if ($MissingFiles) { Write-Host 'Could not find $MissingFiles source file(s). Aborting script.' -ForegroundColor Red Remove-Variable ScriptFolder,RequiredFiles,MissingFiles Exit }

Itt van egy másik tiszta trükk, amit akkor tehetsz, ha kijelentéseket. A legtöbb útmutatást láthatja, ha a nyilatkozatok azt mondják, hogy egy szolgáltatót használ, hogy ellenőrizze a megfelelő feltételeket. Például itt használhatnánk ha ($ MissingFiles -gt 0) hogy a $ MissingFiles nagyobb-e mint a nulla. Ha azonban olyan parancsokat használsz, amelyek egy logikai értéket adnak vissza (mint az előző blokkban, ahol a tesztpályát használtuk), akkor ez nem szükséges. Ezekben az esetekben is megteheti, ha csak tesztel, hogy egy szám nem nulla. Minden nem nulla számot (pozitív vagy negatív) kezelnek igaznak, míg a nulla (vagy ahogyan ez történik, egy nem létező változót) hamisnak kell tekinteni.

Ha $ MissingFiles létezik, és nem nulla, akkor az író-fogadó üzenetet küld arról, hogy hány fájl hiányzik, és a parancsfájl megszakad. Ezután az Eltávolítás-Változó törli az összes létrehozott változót, és a Kilépés kilép a szkriptből. A rendszeres PowerShell konzolon a Remove-Variable nem feltétlenül szükséges erre a célra, mivel a szkriptek által beállított változókat általában elvetik, amikor a parancsfájl kilép. Azonban a PowerShell ISE viselkedik egy kicsit másképp, így érdemes ezt megtartani, ha tervezi a parancsfájl futtatását.

Ha minden rendben van, a szkript folytatódik. Még egy felkészülés az álnév, amit nagyon örülni fogunk később.

New-Alias g Get-Random

Az álnevek alternatív nevek létrehozására szolgálnak a parancsok számára. Ezek hasznosak lehetnek ahhoz, hogy megismerjük az új kezelőfelületet (például: a PowerShell beépített aliasokkal rendelkezik, mint pl. dir -> Get-ChildItem és macska -> Get-Content), vagy rövid kézzel hivatkozhat a gyakran használt parancsokra. Itt csinálunk egy nagyon rövid hivatkozás a Get-Random parancsot, amelyet késõbb használni fognak.

A Get-Random elég sok mindent, amit a neve is jelez. Mivel egy tömb (mint a névjegyek listája) bemenetként van megadva, véletlenszerű elemet választ ki a tömbből és kiüríti. Használható véletlen számok létrehozására is. A Get-Random és a számok megjegyzése azonban az, hogy, mint sok más számítógépes művelet, nulláról számol. Tehát ahelyett, hogy Get-Véletlenszerű 10 ami azt jelenti, hogy a természetesbb "adj egy számot 1-től 10-ig", ez valóban azt jelenti, hogy "adjon nekem egy számot 0 és 9 között." Pontosabb lehet a számok kiválasztására, így a Get-Random úgy viselkedik, elvárják, de erre a forgatókönyvre nem lesz szükségünk.

2. rész: A felhasználói bevitel és a munkához jutás

Bár egy forgatókönyv, amely csak egy véletlen név és telefonszámot generál, nagyszerű, sokkal jobb, ha a szkript lehetővé teszi a felhasználó számára, hogy megadja, hány nevet és számot szeretne kapni egy kötegben. Sajnos nem igazán bízhatunk a felhasználókban, hogy mindig érvényes bevitelt adjanak. Szóval, van egy kicsit több, mint ez $ UserInput = Read-Host.

while (!$ValidInput) { try { [int]$UserInput = Read-Host -Prompt 'Items to be generated' $ValidInput = $true } catch { Write-Host 'Invalid input. Enter a number only.' -ForegroundColor Red } }

A fenti utasítás közben a $ ValidInput értékét ellenőrizzük és megtagadjuk. Mindaddig, amíg a $ ValidInput hamis, vagy nem létezik, a szkriptblokkján keresztül meg fog tartani.

A próba utasítás felhasználói beolvasást hajt végre a Read-Host segítségével, és megpróbálja átszámítani egy egész értékre. (Az a [Int] a Read-Host előtt.) Ha sikeres lesz, akkor a $ ValidInput értéket true értékre állítja be, hogy a while hurok kiléphessen. Ha nem sikerült, akkor a fogási blokk hibát jelez, és mivel a $ ValidInput nem lett beállítva, a hurok vissza fog térni, és ismét megkérdezi a felhasználót.

Miután a felhasználó megfelelően megadta a számot bemenetként, azt szeretnénk, ha a szkript bejelentette, hogy elkezdi ténylegesen elvégezni a munkáját, majd megpróbálja végrehajtani.

Write-Host '`nGenerating $UserInput names & phone numbers. Please be patient.`n' 1..$UserInput | ForEach-Object { <# INSERT RANDOM NAME & NUMBER GENERATOR HERE #> }

Ne aggódj, nem fogjuk elhagyni magunkat, hogy kitaláljuk a véletlenszerű név és szám generátor kódját. Ez csak egy helyőrző megjegyzés, amely megmutatja, hogy hol lesz a következő rész (ahol az igazi munkát végezzük).

A Write-Host sor nagyon egyszerű. Egyszerűen megmondja, hogy hány nevet és telefonszámot generál a szkript, és arra kéri a felhasználót, hogy türelmes legyen, amíg a szkript dolgozik. A`na sztring elején és végén üres vonalat kell beilleszteni a kimenet előtt és után, csak azért, hogy némi vizuális elválasztható legyen a bemeneti vonal és a nevek és számok listája között. Legyen tudatában annak, hogy ez egy back-tick (AKA "súlyos akcentus" - általában a fenti fül, bal oldalán 1), és nem egy apostropé vagy egyetlen idézet az egyes n.

A következő rész más módon mutatja be a ForEach-Object hurok használatát. Általában, ha egy parancsfájl blokkot szeretne futtatni bizonyos számú alkalommal, akkor rendszeresen beállítja a hurokhoz hasonlóan ($ x = 1; $ x -le $ felhasználói bemenet; $ x ++) {<# INSERT SCRIPT HERE #>}.A ForEach-Object segítségével egyszerűsíthetjük ezt, ha egész listát adunk hozzá, és ahelyett, hogy azt mondanánk, hogy ténylegesen bármit is csinálunk ezekkel az egész számokkal, csak egy statikus szkript blokkot futtatunk, amíg az egész számokból kifolyólag meg nem csináljuk.

3. rész: Véletlen név létrehozása

A név létrehozása a folyamat legelején a legegyszerűbb. Ez csak három lépésből áll: Családnévválasztás, nemek kiválasztása és névválasztás. Ne feledje, hogy az álnevet, amelyet a Get-Random-nek még egyszer hoztunk létre? Ideje elkezdeni ezt használni.

$Surname = Get-Content '$ScriptFolderSurnames.txt' | g $Male = g 2 if ($Male) {$FirstName = Get-Content '$ScriptFolderMales.txt' | g} else {$FirstName = Get-Content '$ScriptFolderFemales.txt' | g}

Az első sor a vezetéknevek listáját veszi fel, beviszi a véletlenszerű kiválasztóba, és a kiválasztott nevet $ Családi névhez rendel.

A második sor a személyünk nemét veszi fel. Emlékezzen arra, hogy a Get-Random hogyan kezd számolni nulláról, és hogy a nulladik mennyire hamis, és minden más igaz? Így használjuk Get-Véletlen 2 (vagy sokkal rövidebb g 2 az aliasunknak köszönhetően - mindkettő nullás vagy egy választást eredményez), hogy eldöntsük, vajon férfi vagy sem. Az if / else utasítás utána véletlenszerűen kiválaszt egy férfi vagy női utónevet ennek megfelelően.

4. rész: Véletlenszerű telefonszám létrehozása

Itt van az igazán szórakoztató rész. Korábban megmutattuk Önnek, hogy számos módja van arra, hogy érvénytelen vagy fiktív telefonszámot hozzon létre. Mivel nem akarjuk, hogy minden számunk túlságosan hasonlítson egymásra, véletlenszerűen minden esetben érvénytelen formátumot választunk. A véletlenszerűen kiválasztott formátumokat területkód és Exchange kódja határozza meg, amelyet együttesen $ Prefixként tárolnak.

$NumberFormat = g 5 switch ($NumberFormat) { 0 {$Prefix = '($(g 2)$(g 10)$(g 10)) $(g 10)$(g 10)$(g 10)'} 1 {$Prefix = '($(g 10)9$(g 10)) $(g 10)$(g 10)$(g 10)'} 2 {$Prefix = '($(g 10)$(g 10)$(g 10)) $(g 2)$(g 10)$(g 10)'} 3 {$Prefix = '($(g 10)$(g 10)$(g 10)) $(g 10)11'} 4 {$Prefix = '($(g 10)$(g 10)$(g 10)) 555'} }

Az első sor egy egyszerű véletlenszám-generáció, amely kiválaszthatja, melyik formátumot fogjuk követni a telefonszámhoz. Ezután a kapcsoló utasításban véletlenszerű választási lehetőséget ad, és ennek megfelelően $ Prefixet generál. Ne feledje, hogy az érvénytelen telefonszám típusok listája? A $ NumberFormat értékek 0-3 megfelelnek az első négynek a listában. A 4-es érték az egyik utolsó kettőt generálhatja, mivel mindkettő használja az "555" Exchange kódot.

Itt láthatjuk, hogy egy másik trükköt használunk dupla idézőjelekkel. A kettős idézőjelek nemcsak a változók értelmezését teszik lehetővé, mielőtt a szöveg leadásra kerül - ők is lehetővé teszik a parancsfájlok feldolgozását. Ehhez a következő parancsfájlblokkot kell eltakarnia: "$ (<# SCRIPT HERE #>)". Tehát az, ami fent van, sok egyénileg véletlenszerű számjegy, amelyek közül néhány korlátozott vagy állandósult a szabályoknak megfelelően. Minden karakterlánchoz olyan zárójelek is vannak, mint a normál esetben a körzetszám és az Exchange-kód párjában.

Az utolsó dolog, amire szükségünk van, mielőtt készen állunk a nevünk és telefonszámunk kiadására, egy Előfizetői azonosító létrehozása, amelyet $ Suffixként tárolunk.

switch ($NumberFormat) { {$_ -lt 4} {$Suffix = '$(g 10)$(g 10)$(g 10)$(g 10)'} 4 { switch ($Prefix) { '(800) 555' {$Suffix = '0199'} default {$Suffix = '01$(g 10)$(g 10)'} } } }

Az 555 számra vonatkozó speciális szabályok miatt nem tudunk négy véletlen számot létrehozni minden olyan telefonszám végére, amelyet forgatókönyvünk készít. Tehát az első kapcsoló ellenőrzi, hogy van-e egy 555 számmal. Ha nem, négy véletlen számot generál. Ha ez egy 555-ös szám, akkor a második kapcsoló ellenőrzi a 800-as körzetszámot.Ha ez megegyezik, akkor csak egy érvényes $ utótag használható. Ellenkező esetben a 0100-0199 között bármikor választhat.

Ne feledje, hogy van néhány különböző módja ennek a blokknak a megírására, ahelyett, hogy így lenne. Mindkét kapcsoló kijelentést ki lehetett cserélni az if / else utasításokkal, mivel mindegyik csak két választási lehetőséget kezel. Továbbá, ahelyett, hogy kifejezetten "4" -nek nevezte volna az első kapcsoló nyilatkozatának opcióját, akkor az "alapértelmezett" változatot hasonlóan használhatta a másodiknál, mivel ez volt az egyetlen lehetőség. Az if / else vs. switch kapcsolók közötti választás, illetve az alapértelmezett kulcsszó használata a meghatározott értékek helyett gyakran a személyes preferencia kérdése. Mindaddig, amíg működik, használjon mindent, amire a legkényelmesebb.

Most itt az ideje a kimenetnek.

Write-Output '$FirstName $Surname $Prefix-$Suffix' }

Ez eléggé egyszerű, mint amilyennek a forgatókönyvbe jut. Csak az első és a vezetéknevet adja ki szóközzel elválasztva, majd egy másik helyet a telefonszám előtt. Itt található az Exchange kód és az Előfizetői azonosító közötti szabványos kötőjel is.

Az alsó záróelem a ForEach-Object hurok vége a korábbiakból - hagyja ki ezt, ha már megkapta.

5. rész: A szkript megtisztítása és futtatása

Miután elvégezte a munkát, egy jó szkript tudja, hogyan takarítson meg magának. Ismételten az alábbi változó eltávolítás nem feltétlenül szükséges, ha csak a parancsfájlt futtatja a konzolról, de szeretné, ha az ISE-ben futtatná.

Remove-Item alias:g Remove-Variable ScriptFolder,RequiredFiles,Surname,Male,FirstName,NumberFormat,Prefix,Suffix,ValidInput,UserInput

Miután mindent megtett, mentse el a szkriptet egy ".ps1" kiterjesztéssel ugyanabban a mappában, mint a nevek. Győződjön meg róla, hogy a ExecutionPolicy úgy van beállítva, hogy a szkript futtatható legyen, és forgasson.

Íme egy screenshot az aktív parancsfájlról:

A PowerShell szkriptet és a névlistákkal ellátott szövegfájlokat az alábbi linkről is letöltheti.
A PowerShell szkriptet és a névlistákkal ellátott szövegfájlokat az alábbi linkről is letöltheti.

Véletlen név és telefonszám generátor a PowerShell számára

Ajánlott: