Ako generovať náhodné mená a telefónne čísla s PowerShell

Obsah:

Ako generovať náhodné mená a telefónne čísla s PowerShell
Ako generovať náhodné mená a telefónne čísla s PowerShell

Video: Ako generovať náhodné mená a telefónne čísla s PowerShell

Video: Ako generovať náhodné mená a telefónne čísla s PowerShell
Video: Home Server Setup - Turn your old PC into a useful home server - YouTube 2024, Apríl
Anonim
Keď potrebujete sadu údajov na testovanie alebo demonštráciu a táto zostava musí reprezentovať informácie o osobnej identifikácii (PII), spravidla nechcete používať skutočné údaje, ktoré reprezentujú skutočných ľudí. Tu vás budeme vedieť, ako môžete použiť PowerShell na generovanie zoznamu náhodných mien a telefónnych čísel pre takúto príležitosť.
Keď potrebujete sadu údajov na testovanie alebo demonštráciu a táto zostava musí reprezentovať informácie o osobnej identifikácii (PII), spravidla nechcete používať skutočné údaje, ktoré reprezentujú skutočných ľudí. Tu vás budeme vedieť, ako môžete použiť PowerShell na generovanie zoznamu náhodných mien a telefónnych čísel pre takúto príležitosť.

Čo potrebuješ

Skôr ako začnete, máte nejaké nástroje a informácie, ktoré by ste mali mať:

PowerShell

Tento skript bol vyvinutý pomocou programu PowerShell 4.0 a bol tiež testovaný na kompatibilitu s PowerShell 2.0. PowerShell 2.0 alebo novší bol v systéme Windows vstavaný od Windows 7. Je tiež dostupný pre Windows XP a Vista ako súčasť Windows Management Framework (WMF). Ďalšie podrobnosti a odkazy na prevzatie sú uvedené nižšie.

  • PowerShell 2.0 je dodávaný so systémom Windows 7. Používatelia systému Windows XP SP3 a Vista (SP1 alebo novší) môžu stiahnuť príslušnú verziu WMF od spoločnosti Microsoft v KB968929. Nie je podporovaný v systéme XP SP2 alebo nižšie, alebo Vista bez SP1.
  • PowerShell 4.0 je dodávaný so systémom Windows 8.1. Používatelia systému Windows 7 SP1 môžu na ňu inovovať ako súčasť aktualizácie WMF zo Strediska pre prevzatie softvéru spoločnosti Microsoft. Nie je k dispozícii pre XP alebo Vista.

mená

Budete potrebovať nejaké zoznamy mien, ktoré sa majú pridať do náhodného generátora. Skvelý zdroj pre veľa názvov a informácií o ich popularite (aj keď to nebude použité pre tento skript), je americký sčítanie ľudu Bureau. Zoznamy, ktoré sú k dispozícii na nižšie uvedených odkazoch, sú veľmi veľké, takže ich možno budete chcieť trochu ozdobiť, ak plánujete vytvoriť veľa mien a čísel naraz. Na našom systéme testovania si každý pár / pár trval približne 1,5 sekundy na vytvorenie úplných zoznamov, ale počet kilometrov sa bude líšiť v závislosti od vlastných systémových špecifikácií.

  • priezvisko
  • Mužské prvé mená
  • Ženy prvé mená

Bez ohľadu na zdroj, ktorý používate, budete musieť generovať tri textové súbory, ktoré môže skript použiť ako skupiny na výber svojho názvu. Každý súbor by mal obsahovať iba mená a len jeden názov na riadok. Tieto musia byť uložené v rovnakom priečinku ako skript PowerShell.

Surnames.txt by mali obsahovať priezviská, od ktorých chcete skript vybrať. Príklad:

Smith Johnson Williams Jones Brown

Males.txt by mali obsahovať mená, od ktorých chcete skript vybrať. Príklad:

James John Robert Michael William

Females.txt by mali obsahovať mená, z ktorých chcete skript vyberať. Príklad:

Mary Patricia Linda Barbara Elizabeth

Pravidlá pre telefónne čísla

Ak chcete mať istotu, že vaše telefónne čísla nezodpovedajú skutočnému telefónnemu číslu nikoho, najjednoduchším spôsobom je použiť dobre známy Exchange Code (555). Ak však chcete zobraziť súbor údajov s množstvom telefónnych čísel, 555 začne vyzerať celkom monotónne. Ak chcete urobiť veci zaujímavejšie, vygenerujeme ďalšie telefónne čísla, ktoré porušujú pravidlá pre severoamerický číslovací plán (NANP). Nižšie sú uvedené niektoré vzorové neplatné telefónne čísla, ktoré reprezentujú každú triedu čísiel, ktoré budú generované týmto skriptom:

  • (157) 836-8167 Toto číslo je neplatné, pretože oblasť kódy nemôže začať s 1 alebo 0.
  • (298) 731-6185 Toto číslo je neplatné, pretože NANP nepripisuje kódy oblasti s číslom 9 ako druhú číslicu.
  • (678) 035-7598 Toto číslo je neplatné, pretože kódy Exchange nemôžu začínať číslom 1 alebo 0.
  • (752) 811-1375 Toto číslo je neplatné, pretože kódy Exchange nemôžu skončiť s dvoma 1s.
  • (265) 555-0128 Toto číslo je neplatné, pretože kód Exchange je 555, a ID účastníka je v rozsahu rezervovanom pre fiktívne čísla.
  • (800) 555-0199 Toto číslo je jediným 800 číslom s 555 Exchange Code, ktoré je vyhradené pre fiktívne číslo.

Upozorňujeme, že vyššie uvedené pravidlá podliehajú zmenám a môžu sa líšiť podľa jurisdikcie. Mali by ste urobiť svoj vlastný prieskum na overenie súčasných pravidiel, ktoré sa vzťahujú na miestne nastavenie, pre ktoré budete vytvárať telefónne čísla.

Bežné príkazy

Existujú niektoré pomerne bežné príkazy, ktoré sa budú používať v celom tomto skripte, takže by ste mali získať základnú predstavu o tom, čo to znamenajú skôr, ako sa ponoríme do skutočného písania.

  • Foreach-Object preberá pole alebo zoznam objektov a vykoná danú operáciu na každom z nich. V rámci bloku skriptov ForEach-Object sa premenná $ _ používa na označenie aktuálnej položky, ktorá sa spracováva.
  • ak … inak príkazy vám umožňujú vykonávať operáciu len vtedy, ak sú splnené určité podmienky, a (voliteľne) špecifikujte, čo treba urobiť, ak táto podmienka nie je splnená.
  • prepínač vyhlásenia sú akoby vyhlásenia s viacerými možnosťami. Prepínač skontroluje objekt v niekoľkých podmienkach a spustí akékoľvek bloky skriptov, ktoré sú určené pre podmienky, ktoré sa zhodujú s objektom. Môžete tiež voliteľne určiť predvolený blok, ktorý sa bude spúšťať iba vtedy, ak sa nezodpovedajú žiadne ďalšie podmienky. Spínacie príkazy tiež používajú premennú $ _, aby sa odvolávali na aktuálnu spracovávanú položku.
  • zatiaľ čo príkazy vám umožňujú priebežne opakovať blok skriptu, pokiaľ je splnená určitá podmienka. Keď sa stane niečo, čo spôsobí, že podmienka prestane byť pravdivá po ukončení bloku skriptu, ukončí sa slučka.
  • Skús chytiť príkazy pomáhajú pri manipulácii s chybami. Ak sa niečo pokazí s blokom skriptu určeným na pokus, bude spustený blok úlovku.
  • Get-Content robí to, čo hovorí na plechovke.Získate obsah určeného objektu - zvyčajne súbor. Toto sa dá použiť na zobrazenie obsahu textového súboru na konzole, alebo ako v tomto skripte prechádza obsah pozdĺž potrubia, ktorý sa má použiť s inými príkazmi.
  • Write-hostiteľ dáva veci do konzoly. Používa sa na zobrazovanie správ používateľovi a nie je zahrnutý do výstupu skriptu, ak sa výstup presmeruje.
  • Write-Output v skutočnosti generuje výstup. Za normálnych okolností sa toto dá do konzoly, ale môže byť tiež presmerované inými príkazmi.

V skripte sú aj ďalšie príkazy, ale vysvetlíme ich, ako ideme.

Vytváranie skriptu

Teraz je čas, aby sme dostali špinavé ruky.

Časť 1: Príprava na prácu

Ak sa vám páči, aby váš skript začal bežať z čistej konzoly, tu je prvý riadok, ktorý chcete v ňom.

Clear-Host

Teraz, keď máme čistú obrazovku, ďalšia vec, ktorú chceme urobiť, je skontrolovať skript, aby sa ubezpečil, že všetko, čo potrebuje, je na mieste. Aby sme to mohli urobiť, musíme začať tým, že povieme, kam sa pozrieť a čo hľadať.

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

Prvý riadok je veľmi užitočný pre každý skript. Definuje premennú, ktorá ukazuje na priečinok obsahujúci skript. Toto je nevyhnutné, ak váš skript potrebuje iné súbory, ktoré sú umiestnené v tom istom adresári ako sám o sebe (alebo známa relatívna cesta z tohto adresára), pretože inak sa vyskytnú chyby, ak a keď sa pokúsite spustiť skript, pracovný adresár.

Druhý riadok vytvára rad názvov súborov, ktoré sú potrebné na správne fungovanie skriptu. Použijeme to spolu s premennou $ ScriptFolder v ďalšom kuse, kde skontrolujeme, či sú tieto súbory prítomné.

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

Tento kus skriptu pošle pole $ RequiredFiles do bloku ForEach-Object. V rámci tohto bloku skriptu príkaz if používa Test-Path na zistenie, či hľadaný súbor je miesto, kam patrí. Cesta testovania je jednoduchý príkaz, ktorý pri zadaní cesty k súboru vráti základnú pravú alebo falošnú odpoveď, aby nám povedal, či cesta ukazuje na niečo, čo existuje. Výkričník tam je a nie operátor, ktorý odošle odpoveď testovacej cesty pred jej odovzdaním do príkazu if. Takže ak Test-Path vráti falošný (to znamená, že súbor, ktorý hľadáme, neexistuje), bude konvertovaný na true tak, že príkaz if vykoná svoj blok skriptu.

Ďalšia vec, ktorú si tu všimnete, ktorá sa bude často používať v tomto skripte, je použitie dvojitých úvodzoviek namiesto jednočinných úvodzoviek. Keď vložíte niečo do jednoduchých úvodzoviek, PowerShell to považuje za statický reťazec. Čokoľvek, čo je v jednotlivých citáciách, prechádza presne tak, ako je. Dvojité kotácie informujú PowerShell, že prenesú premenné a niektoré ďalšie špeciálne položky do reťazca predtým, ako ich odovzdajú. Tu dvojitá ukážka znamená, že namiesto behu Skúšobná cesta '$ ScriptFolder $ _' budeme vlastne robiť niečo viac Cesta testov "C: Scripts Surnames.txt" (za predpokladu, že váš skript je v C: Scripts a ForEach-Object práve pracuje na 'Surnames.txt').

Pre každý súbor, ktorý sa nenašiel, zapisuje hosť do chybového hlásenia červenou farbou, ktorá vám oznámi, ktorý súbor chýba. Potom sa zvyšuje premenná $ MissingFiles, ktorá sa použije v ďalšom kuse, chyba a skončí, ak chýbajú nejaké súbory.

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

Tu je ďalší čistý trik, ktorý môžete urobiť s vyhláseniami. Väčšina sprievodcov vám uvidí, či vyhlásenia vám oznámia, že používate operátor, aby ste skontrolovali zodpovedajúce podmienky. Napríklad tu by sme mohli použiť ak ($ MissingFiles -gt 0) či $ MissingFiles je väčšia ako nula. Ak však už používate príkazy, ktoré vrátia booleovskú hodnotu (ako v predchádzajúcom bloku, kde sme používali Cesta testovania), nie je to potrebné. Môžete tak urobiť aj v takýchto prípadoch, keď práve testujete, či je číslo nenulové. Akékoľvek nenulové číslo (kladné alebo záporné) sa považuje za pravdivé, zatiaľ čo nula (alebo, ako sa tu môže stať, neexistujúca premenná) bude považovaná za falošnú.

Ak $ MissingFiles existuje a nie je nula, Write-Host uverejní správu o tom, koľko súborov chýbajú a že skript preruší. Potom Remove-Variable vyčistí všetky premenné, ktoré sme vytvorili a Exit ukončí skript. Na bežnej konzole PowerShell nie je pre tento konkrétny účel potrebná funkcia Odstránenie premennej, pretože premenné nastavené skripty sa zvyčajne vyradia po ukončení skriptu. PowerShell ISE sa však správa trochu inak, takže by ste si to mohli nechať, ak máte v pláne spustiť skript odtiaľ.

Ak je všetko v poriadku, skript bude pokračovať. Ešte jedna príprava je alias, že budeme naozaj radi, že budeme neskôr.

New-Alias g Get-Random

Aliasy sa používajú na vytvorenie alternatívnych názvov príkazov. Môžu nám pomôcť zoznámiť sa s novým rozhraním (napr.: PowerShell má vstavané aliasy ako dir -> Get-ChildItem a cat -> Get-Content) alebo urobiť krátke odkazy pre bežne používané príkazy. Tu robíme veľmi krátky odkaz pre Get-Random príkaz, ktorý sa oveľa neskôr použije.

Get-Random skoro robí to, čo naznačuje jeho názov. Vzhľadom na pole (ako zoznam názvov) ako vstup si vyberie náhodnú položku z poľa a vypliesie ju. Môže sa použiť aj na generovanie náhodných čísel. Čo treba pamätať na Get-Random a čísla, je to, že rovnako ako mnohé iné počítačové operácie začne počítať od nuly. Takže namiesto toho Get-Random 10 znamená to prirodzenejší "daj mi číslo od 1 do 10" to naozaj znamená "daj mi číslo od 0 do 9." Môžeš byť konkrétnejší v súvislosti s výberom čísla, takže Get-Random sa správa viac, ako by si prirodzene očakávame, ale v tomto scenári to nepotrebujeme.

Časť 2: Získanie vstupov používateľov a začatie práce

Zatiaľ čo skript, ktorý generuje len jedno náhodné meno a telefónne číslo je skvelé, je oveľa lepšie, ak skript umožňuje užívateľovi určiť, koľko mien a čísel chce dostať v jednej dávke. Bohužiaľ nemôžeme skutočne dôverovať používateľom, aby vždy dali platný vstup. Takže je o to trochu viac ako len $ 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 } }

Vyššie uvedené vyhlásenie skontroluje a odmieta hodnotu $ ValidInput. Pokiaľ $ ValidInput je falošný, alebo neexistuje, bude pokračovať vo svojej skripte blokom skriptu.

Skúšobný príkaz preberá užívateľský vstup cez Read-Host a pokúša sa premeniť na celočíselnú hodnotu. (To je [Int] pred Read-Host.) Ak je to úspešné, nastaví hodnotu $ ValidInput na hodnotu true tak, aby slučka while mohla opustiť. Ak nie je úspešný, blok chyby uverejní chybu a pretože hodnota $ ValidInput sa nestala nastavená, cyklus while sa vráti späť a zobrazí výzvu používateľovi znova.

Keď používateľ správne zadal číslo ako vstup, chceme skript oznámiť, že sa chystá začať s vlastnou činnosťou a potom sa o tom podarí.

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

Nebojte sa, nechceme vás opustiť sami, aby ste zistili kód generátora náhodných čísel a čísel. To je len poznámka typu placeholder, ktorá vám ukáže, kde ďalšia časť (kde sa skutočná práca robí) sa hodí.

Riadok Write-Host je veľmi jednoduchý. Jednoducho hovorí, koľko mien a telefónnych čísiel skript vygeneruje, a vyzýva používateľa, aby bol trpezlivý, kým skript nevykoná svoju prácu.`nna začiatku a na konci reťazca vložte prázdnu čiaru pred a po tomto výstupe, len aby ste získali nejaké vizuálne oddelenie medzi vstupnou líniou a zoznamom mien a čísel. Uvedomte si, že to je back-tick (AKA "hrubý prízvuk" - zvyčajne kľúč nad tabuľkou, vľavo od 1) a nie apostrof alebo single-quote pred každým n.

Nasledujúca časť ukazuje iný spôsob, ako môžete použiť slučku ForEach-Object. Typicky, ak chcete, aby bol blok skriptu spustený niekoľkokrát, nastavíte si pravidelnú slučku pre ($ x = 1; $ x -le $ UserInput; $ x ++) {<# INSERT SCRIPT HERE #>}.ForEach-Object nám to umožňuje zjednodušiť tým, že mu prinesie zoznam celých čísel a namiesto toho, aby nám povedal, aby skutočne urobil čokoľvek s týmito celistvami, dáme mu len statický skriptový blok, ktorý beží, kým sa nevyčerpá celá čísla, aby to urobil.

Časť 3: Generovanie náhodného mena

Generovanie názvu je najjednoduchší bit zvyšku tohto procesu. Skladá sa iba z troch krokov: vyberanie priezviska, vyberanie pohlavia a vyberanie krstného mena. Pamätajte si, že alias sme urobili pre Get-Random späť? Čas začať používať to.

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

Prvý riadok preberá náš zoznam priezvisk, pridáva ho do náhodného výberu a priradí zvolené meno k priezvisku $.

Druhý riadok vyberá pohlavie našej osoby. Pamätajte, ako začne Get-Random počítať od nuly a ako je nula falošná a všetko ostatné je pravdivé? Tak to používame Get-Random 2 (alebo oveľa kratšie g 2 vďaka nášmu aliasu - obe majú za následok voľbu medzi nulou alebo jednou), aby sme sa rozhodli, či je naša osoba mužská alebo nie. Príkaz if / else následne náhodne vyberie menom alebo ženským krstným menom zodpovedajúcim spôsobom.

Časť 4: Generovanie náhodného telefónneho čísla

Tu je naozaj zábavná časť. Predtým sme vám ukázali, ako je niekoľko spôsobov, ako môžete vytvoriť neplatné alebo fiktívne telefónne číslo. Keďže nechceme, aby všetky naše čísla vyzerali príliš podobne, budeme náhodne vyberať neplatný formát čísel zakaždým. Náhodne vybrané formáty budú definované pomocou ich kódu oblasti a kódu Exchange, ktorý bude spoločne uložený ako predpona $.

$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'} }

Prvý riadok je priamočiare generovanie náhodných čísel na výber formátu, ktorý budeme sledovať pre telefónne číslo. Následne príkaz switch prevezme túto náhodnú voľbu a zodpovedajúcim spôsobom generuje prefix $. Nezabudnite, že zoznam neplatných typov telefónnych čísel? Hodnoty $ NumberFormat 0-3 zodpovedajú prvým štyrom v tomto zozname. Hodnota 4 môže vygenerovať jeden z posledných dvoch, pretože obe používajú Exchange Code "555".

Tu môžete tiež vidieť, že používame ďalší trik s dvojitými úvodzovkami. Dvojité úvodzovky vám neumožňujú iba interpretovať premenné predtým, ako sa výstup stane reťazcom - tiež vám umožnia spracovať bloky skriptov. Ak chcete urobiť tak, zabalte blok skriptu takto: "$ (<# SCRIPT HERE #>)", Takže to, čo máte vyššie, je veľa individuálne randomizovaných číslic, pričom niektoré z nich sú buď obmedzené alebo sú nastavené staticky podľa pravidiel, ktoré musíme dodržiavať. Každý reťazec má tiež zátvorky a medzery, ako by ste normálne očakávali v párovom kóde a kóde Exchange Code.

Posledná vec, ktorú musíme urobiť predtým, než budeme pripravení na vytlačenie nášho mena a telefónneho čísla, je vytvoriť ID účastníka, ktorý bude uložený ako prípona $.

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)'} } } }

Z dôvodu špeciálnych pravidiel pre 555 čísel nemôžeme generovať len štyri náhodné číslice na konci každého telefónneho čísla, ktoré bude náš skript robiť. Takže prvý prepínač skontroluje, či máme číslo 555. Ak nie, generuje štyri náhodné číslice. Ak ide o číslo 555, druhý prepínač skontroluje 800-miestny kód.Ak sa to zhoduje, existuje len jeden platný príp. $ Suffix, ktorý môžeme použiť. V opačnom prípade je dovolené vybrať si z čokoľvek medzi 0100-0199.

Všimnite si, že existuje niekoľko rôznych spôsobov, ako by mohol byť tento blok napísaný namiesto toho, ako je. Obidve výkazy prepínača mohli byť nahradené príkazmi if / else, pretože každý z nich má iba dve voľby. Tiež namiesto toho, aby sa výslovne vytočilo "4" ako voľba pre prvý prepínač, "predvolené" mohlo byť použité podobne ako to bolo vykonané v druhej, pretože to bola jediná voľba. Výber medzi možnosťou if / else vs. switch, alebo kde sa má použiť predvolené kľúčové slovo namiesto konkrétnych hodnôt, sa často blíži k otázke osobných preferencií. Pokiaľ to funguje, používajte čo najviac.

Teraz je čas na výstup.

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

Toto je skoro rovnako jednoduché, ako sa v skripte. Práve zobrazuje meno a priezvisko oddelené medzerami a potom iné miesto pred telefónnym číslom. Tu je miesto, kde sa pridáva štandardná pomlčka medzi Exchange Code a Subscriber ID.

Uzatváracia konzola v dolnej časti je koncom slučky ForEach-Object z predchádzajúceho - vynechajte to, ak ste ju už získali.

Časť 5: Vyčistenie a spustenie skriptu

Po vykonaní všetkej práce, dobrý skript vie, ako sa vyčistiť po sebe. Opäť platí, že odstránenie premennej nižšie nie je v skutočnosti potrebné, ak idete len spustiť skript z konzoly, ale budete ju chcieť, ak ju niekedy plánujete spustiť v ISE.

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

Potom, čo to všetko urobíte, uložte skript s príponou ".ps1" do rovnakého priečinka ako vaše súbory s názvami. Uistite sa, že vaša ExecutionPolicy je nastavená tak, aby skript mohol bežať a dať to vír.

Tu je screenshot skriptu v akcii:

Môžete tiež stiahnuť súbor ZIP obsahujúci tento skript PowerShell a textové súbory so zoznamami mien z nižšie uvedeného odkazu.
Môžete tiež stiahnuť súbor ZIP obsahujúci tento skript PowerShell a textové súbory so zoznamami mien z nižšie uvedeného odkazu.

Generátor náhodných mien a telefónnych čísiel pre PowerShell

Odporúča: