Domača » kako » Kako ustvariti naključna imena in telefonske številke z PowerShell

    Kako ustvariti naključna imena in telefonske številke z PowerShell

    Če potrebujete podatkovni niz za testiranje ali predstavitev, in ta sklop mora predstavljati osebne podatke (PII), običajno ne želite uporabiti resničnih podatkov, ki predstavljajo dejanske osebe. Tukaj vas bomo seznanili s tem, kako lahko s programom PowerShell ustvarite seznam naključnih imen in telefonskih številk za takšno priložnost.

    Kaj rabiš

    Preden začnete, imate nekaj orodij in informacij, ki jih morate imeti:

    PowerShell

    Ta skript je bil razvit z uporabo PowerShell 4.0 in je bil preizkušen tudi za združljivost s PowerShell 2.0. PowerShell 2.0 ali novejši je vgrajen v sistem Windows od operacijskega sistema Windows 7. Na voljo je tudi za operacijske sisteme Windows XP in Vista kot del okvira za upravljanje Windows (WMF). Spodaj so navedene nekatere podrobnosti in povezave za prenos.

    • PowerShell 2.0 prihaja z operacijskim sistemom Windows 7. Uporabniki operacijskega sistema Windows XP SP3 in Vista (SP1 ali novejši) lahko prenesejo ustrezno različico WMF iz Microsofta v datoteko KB968929. Ni podprt v XP SP2 ali novejši ali Vista brez SP1.
    • PowerShell 4.0 prihaja z operacijskim sistemom Windows 8.1. Uporabniki operacijskega sistema Windows 7 s servisnim paketom SP1 lahko nadgradijo na ta del kot del posodobitve WMF iz Microsoftovega centra za prenose. Ni na voljo za XP ali Vista.

    Imena

    Potrebovali boste nekaj seznamov imen, ki se bodo vnesli v naključni generator. Odličen vir za a lot imena in informacije o njihovi priljubljenosti (čeprav se ta scenarij ne bo uporabljal), je Urad za popis prebivalstva Združenih držav. Seznami, ki so na voljo na spodnjih povezavah, so zelo veliki, zato jih boste morda želeli nekoliko zmanjšati, če nameravate ustvariti veliko imen in številk hkrati. V našem testnem sistemu je vsak par ime / številka potreboval približno 1,5 sekunde, da se ustvari s popolnimi seznami, vendar se bo vaše število prevoženih kilometrov razlikovalo glede na lastne specifikacije sistema..

    • Priimki
    • Moška imena
    • Ženska imena

    Ne glede na vir, ki ga uporabljate, boste morali ustvariti tri besedilne datoteke, ki jih lahko skript uporabi kot bazene za izbiro imena. Vsaka datoteka mora vsebovati samo imena in samo eno ime na vrstico. Te je treba shraniti v isto mapo kot scenarij PowerShell.

    Names.txt mora vsebovati priimke, iz katerih želite izbrati skript. Primer:

    Smith Johnson Williams Jones Brown

    Males.txt naj vsebuje moška imena, iz katerih želite izbrati skript. Primer:

    James John Robert Michael

    Females.txt mora vsebovati ženska imena, iz katerih želite izbrati skript. Primer:

    Mary Patricia Linda Barbara Elizabeth

    Pravila za telefonske številke

    Če želite biti prepričani, da se vaše telefonske številke ne ujemajo z resnično telefonsko številko, je najlažje uporabiti dobro znano »555« Exchange Code. Toda, če boste prikazovali podatkovni niz z veliko telefonskimi številkami, bo 555 zelo hitro začel izgledati precej monotono. Da bi stvari postale zanimivejše, bomo ustvarili druge telefonske številke, ki kršijo pravila za North American Numbering Plan (NANP). Spodaj je nekaj vzorčnih neveljavnih telefonskih številk, ki predstavljajo vsak razred številke, ki ga generira ta skript:

    • (157) 836-8167
      Ta številka ni veljavna, ker se področne kode ne morejo začeti z 1 ali 0.
    • (298) 731-6185
      Ta številka ni veljavna, ker NANP ne dodeljuje območnih kod z 9 kot drugo številko.
    • (678) 035-7598
      Ta številka ni veljavna, ker Exchange kode ne morejo začeti z 1 ali 0.
    • (752) 811-1375
      Ta številka ni veljavna, ker menjalni kodi ne morejo končati z dvema 1-ovima.
    • (265) 555-0128
      Ta številka ni veljavna, ker je koda za izmenjavo 555, in ID naročnika je znotraj območja, ki je rezervirano za navidezna števila.
    • (800) 555-0199
      Ta številka je edina številka s kodo za izmenjavo 555, ki je rezervirana za uporabo kot navidezna številka.

    Upoštevajte, da se zgornja pravila lahko spremenijo in se lahko razlikujejo glede na pristojnost. Izvedite lastne raziskave, da preverite veljavna pravila, ki veljajo za jezik, za katerega boste ustvarjali telefonske številke.

    Skupni ukazi

    Obstaja nekaj dokaj pogostih ukazov, ki se bodo uporabljali v tem skriptu, zato bi morali dobiti osnovno predstavo o tem, kaj to pomeni, preden se potopimo v dejansko pisanje.

    • Za vsak objekt prevzame polje ali seznam objektov in izvede določeno operacijo na vsakem izmed njih. V bloku skripta ForEach-Object je spremenljivka $ _ uporabljena za sklicevanje na trenutno obdelano postavko.
    • če potem izjave vam omogočajo, da izvedete operacijo le, če so izpolnjeni določeni pogoji, in (po želji) določite, kaj naj se izvede, če ta pogoj ni izpolnjen.
    • stikalo izjave so podobne izjavam z več izbirami. Stikalo bo preverilo objekt proti več pogojem in zagnalo vse bloke, ki so podani za pogoje, ki jih objekt ustreza. Po želji lahko podate tudi privzeti blok, ki se bo izvajal samo, če se ne bodo ujemali drugi pogoji. Stikala Switch uporabljajo spremenljivko $ _, ki se nanaša na trenutno obdelano postavko.
    • medtem Izjave vam omogočajo, da neprestano ponavljate skriptni blok, dokler je izpolnjen določen pogoj. Ko se zgodi nekaj, kar povzroči, da pogoj ne bo več resničen, ko je blok skripta končan, zanka zapre.
    • poskusite ... ulovite izjave pomagajo pri ravnanju z napakami. Če se kaj dogaja z blokom skriptov, določenim za poskus, se bo zagnal blok.
    • Get-Content počne, kar piše na kositru. Prikaže vsebino določenega objekta - običajno datoteko. To se lahko uporabi za prikaz vsebine besedilne datoteke na ukazni mizi ali, kot v tem skriptu, posredovanje vsebine vzdolž cevovoda, ki se uporablja z drugimi ukazi..
    • Napišite gostitelja postavi stvari v konzolo. Uporablja se za predstavitev sporočil uporabniku in ni vključena v izhodno skripto, če se izhod preusmeri.
    • Write-Output dejansko ustvarja rezultate. Običajno se to odlaga na konzolo, lahko pa jo tudi preusmerijo drugi ukazi.

    V skriptu obstajajo še drugi ukazi, vendar jih bomo razložili, ko gremo.

    Izdelava scenarija

    Zdaj je čas, da umazamo roke.

    1. del: Pripravite se na delo

    Če želite, da se vaš scenarij začne izvajati iz čiste konzole, je tu prva vrstica, ki jo želite v njej.

    Clear-Host

    Zdaj, ko imamo čisti zaslon, je naslednja stvar, ki jo želimo narediti, da preverite skript, da se prepričate, da je vse potrebno. Da bi to naredili, moramo začeti tako, da mu povemo, kje iskati in kaj iskati.

    $ ScriptFolder = Razdeli pot $ MyInvocation.MyCommand.Definition -Parent $ RequiredFiles = ('Males.txt', 'Females.txt', 'Names' '\ t

    Prva vrstica je zelo uporabna za vse skripte. Določa spremenljivko, ki kaže na mapo, ki vsebuje skript. To je bistvenega pomena, če vaš skript potrebuje druge datoteke, ki se nahajajo v istem imeniku kot sam (ali znana relativna pot iz tega imenika), ker boste sicer naleteli na napake, če in ko poskusite zagnati skript, ko ste v drugem delovnega imenika.

    Druga vrstica ustvari niz imen datotek, ki so potrebni za pravilno izvajanje skripta. To bomo uporabili skupaj s spremenljivko $ ScriptFolder v naslednjem delu, kjer bomo preverili, ali so te datoteke prisotne.

    $ RequiredFiles | Za vsak objekt if (! (Test-Path "$ ScriptFolder \ _")) Write-Host "$ _ not found." -ForegroundColor Red $ MissingFiles ++

    Ta del skripta pošlje polje $ RequiredFiles v blok ForEach-Object. V tem bloku skripta stavek if uporablja preskusno pot, da ugotovi, ali je datoteka, ki jo iščemo, mesto, ki ji pripada. Test-Path je preprost ukaz, ki, ko je podan pot datoteke, vrne osnovni resnični ali napačen odgovor, da nam pove, ali pot kaže na nekaj, kar obstaja. Klicaj je a ne operaterja, ki obrne odgovor preskusne poti, preden ga posreduje stavku if. Torej, če Test-Path vrne false (to pomeni, da datoteka, ki jo iščemo, ne obstaja), se bo pretvorila v true, tako da bo stavek if izvršil blok skriptov.

    Druga stvar, ki jo je treba upoštevati tukaj, ki se bo pogosto uporabljala v tem skriptu, je uporaba dvojnih narekovajev namesto enojnih narekovajev. Ko nekaj vnesete v enojni narekovaji, jo PowerShell obravnava kot statični niz. Karkoli je v enojnih narekovajih, bo potekalo točno tako kot je. Z dvojnimi narekovaji PowerShell pove, da prevede spremenljivke in nekatere druge posebne elemente znotraj niza, preden ga prenese. Tukaj dvojni narekovaji pomenijo to namesto teka Preskusna pot '$ ScriptFolder \ t  dejansko bomo počeli nekaj podobnega Preizkusna pot "C: Skripti (ob predpostavki, da je vaš skript v C: Skripti, in ForEach-Object trenutno deluje na 'Names' '\ t.

    Za vsako datoteko, ki ni najdena, bo Write-Host objavil sporočilo o napaki rdeče, da vam pove, katera datoteka manjka. Potem poveča spremenljivko $ MissingFiles, ki bo uporabljena v naslednjem delu, do napake in konca, če manjkajo datoteke.

    if ($ MissingFiles) Write-Host "Ne morem najti izvorne datoteke $ MissingFiles. Aborting script." -ForegroundColor Rdeča mapa za odstranjevanje spremenljivk, zahtevane datoteke, izhod iz manjkajočih datotek

    Tukaj je še en dober trik, ki ga lahko naredite z izjavami, če. Večina vodnikov, ki jih boste videli, če vam bodo stavki povedali, da uporabite operaterja za preverjanje ustreznega pogoja. Na primer, tukaj lahko uporabimo if ($ MissingFiles -gt 0) da vidite, ali je $ MissingFiles večji od nič. Vendar, če že uporabljate ukaze, ki vrnejo boolovo vrednost (kot v prejšnjem bloku, kjer smo uporabljali preskusno pot), to ni potrebno. Lahko storite tudi brez tega v primerih, kot je ta, ko ste samo testiranje, da vidite, če je število, ki ni nič. Vsaka številka, ki ni nič (pozitivna ali negativna), se obravnava kot resnična, medtem ko se nič (ali, kot se lahko zgodi, neobstoječa spremenljivka) obravnava kot napačna.

    Če $ MissingFiles obstaja in je ničelna, bo Write-Host objavil sporočilo, ki vam bo povedalo, koliko datotek manjka in bo skript prekinjen. Nato bo Remove-Variable počistil vse spremenljivke, ki smo jih ustvarili, Exit pa bo zapustil skript. Pri navadni konzoli PowerShell odstranitev spremenljivke za ta namen dejansko ni potrebna, ker se spremenljivke, ki jih določijo skripte, običajno zavržejo, ko skript zapade. Vendar pa se PowerShell ISE obnaša nekoliko drugače, zato ga boste morda želeli obdržati, če nameravate zagnati skript od tam.

    Če so vse stvari v redu, se bo scenarij nadaljeval. Še ena priprava, ki jo lahko naredimo, je vzdevek, ki ga bomo resnično veselili kasneje.

    New-Alias ​​g Get-Random

    Vzdevki se uporabljajo za ustvarjanje nadomestnih imen za ukaze. To je lahko koristno za pomoč pri seznanjanju z novim vmesnikom (npr .: PowerShell ima vgrajene vzdevke, kot sta dir -> Get-ChildItem in cat -> Get-Content) ali sklic na kratke roke za pogosto uporabljene ukaze. Tukaj naredimo zelo skrajšana referenca za Get-Random ukaz, ki bo uporabljen veliko kasneje.

    Get-Random precej počne to, kar pomeni njegovo ime. Glede na vnos matrike (kot je seznam imen), izbere naključno postavko iz matrike in jo izpljune. Lahko se uporablja tudi za ustvarjanje naključnih števil. Ne pozabite, da je Get-Random in številke, čeprav je, kot mnoge druge računalniške operacije, začne štetje od nič. Torej, namesto Get-Random 10 kar pomeni bolj naravno »daj mi številko od 1 do 10«, to res pomeni »dajte mi številko od 0 do 9.« Lahko ste natančnejši pri izbiri številke, tako da se Get-Random obnaša bolj kot vi. pričakujemo, vendar tega ne bomo potrebovali v tem skriptu.

    Del 2: Pridobivanje uporabniškega vnosa in začetek dela

    Čeprav je scenarij, ki generira samo eno naključno ime in telefonsko številko, odličen, je veliko bolje, če scenarij uporabniku omogoča, da določi število imen in številk, ki jih želijo dobiti v eni seriji. Na žalost uporabnikom ne moremo povsem zaupati, da vedno dajejo veljavne vnose. Torej je malo dosti tega, kot samo $ UserInput = Read-Host.

    medtem ko (! $ ValidInput) try [int] $ UserInput = Read-Host -Prompt 'Postavke, ki bodo generirane' $ ValidInput = $ true catch Write-Host 'Neveljaven vnos. Vnesite samo številko. ' -ForegroundColor Red

    Zgoraj navedeni stavek preverja in zavrača vrednost $ ValidInput. Dokler je $ ValidInput napačen ali pa ne obstaja, se bo še naprej ukvarjal s svojim blokom skriptov.

    Izjava try zahteva vnos uporabnika prek Read-Host in ga poskuša pretvoriti v celo število. (To je [int] pred Read-Host.) Če je uspešen, bo nastavil $ ValidInput na true, tako da bo zanka while lahko izstopila. Če ni uspešen, blok za ulov objavi napako in ker $ ValidInput ni bil nastavljen, se bo zanka while vrnila nazaj in uporabnika ponovno vprašala..

    Ko uporabnik pravilno vnese številko kot vnos, želimo, da skript sporoči, da bo začel dejansko opravljati svoje delo in nato narediti to.

    Write-Host "'nGenerating $ UserInput imena in telefonske številke. Bodite potrpežljivi." 1 ... $ UserInput | ZaEach-Object 

    Ne skrbite, ne bomo vas pustili sami, da bi ugotovili kodo generatorja naključnega imena in številke. To je samo komentar o ogradi, ki vam pokaže, kje bo naslednji del (kjer se opravi resnično delo) primeren.

    Vrstica Write-Host je zelo enostavna. Preprosto pove, koliko imen in telefonskih številk bo ustvaril skript, in prosi uporabnika, naj bo potrpežljiv, medtem ko skript opravlja svoje delo. The'n na začetku in koncu niza vstavite prazno vrstico pred in po izhodu, samo da bi dobili vizualno ločnico med vhodno vrstico in seznamom imen in številk. Zavedajte se, da je to povratna kljukica (AKA "grob naglas" - ponavadi ključ nad tabulatorjem, levo od 1) in ne apostrof ali enojni citat pred vsakim n.

    V naslednjem delu je prikazan drugačen način, ki ga lahko uporabite za zanko Object-Object. Običajno, če želite, da se skriptni blok teče določeno število krat, nastavite običajno za zanko za ($ x = 1; $ x -le $ UserInput; $ x ++) . ForEach-Object nam omogoča, da to poenostavimo tako, da ji podamo seznam celih števil in namesto tega, da ji rečemo, da dejansko naredi ničesar s temi celimi števili, samo dajemo blok statičnega skripta, da se zažene, dokler ne zmanjka celih števil,.

    3. del: Ustvarjanje naključnega imena

    Ustvarjanje imena je najpreprostejši del tega procesa. Sestavljen je samo iz treh korakov: izbiranje priimka, izbiranje spola in izbiranje imena. Se spomniš tistega vzdevka, ki smo ga naredili za Get-Random? Čas je za začetek uporabe.

        $ Priimek = Get-Content "$ ScriptFolder \ t g $ Male = g 2 if ($ Male) $ FirstName = Get-Content "$ ScriptFolder Males.txt" | g else $ FirstName = Get-Content "$ ScriptFolder Females.txt" | g

    Prva vrstica prevzame naš seznam priimkov, jo vnese v naključni izbirnik in dodeli izbrano ime za $ Priimek.

    Druga vrstica izbira spol naše osebe. Ne pozabite, kako Get-Random začne šteti od nič, in kako je ničelna in vse ostalo resnično? Tako uporabljamo Get-Random 2 (ali veliko krajši g 2 zahvaljujoč našemu vzdevku - oba imata za posledico izbiro med ničlo ali eno), da se odloči, ali je naša moška ali ne. Izjava if / else nato naključno izbere moško ali žensko ime.

    Del 4: Ustvarjanje naključne telefonske številke

    Tukaj je res zabaven del. Pred tem smo vam pokazali, kako lahko naredite neveljavno ali izmišljeno telefonsko številko na več načinov. Ker ne želimo, da bi vse naše številke izgledale preveč podobne, bomo vsakič naključno izbrali neveljavno obliko številke. Naključno izbrani formati bodo določeni s področno kodo in kodo Exchange, ki bosta skupaj shranjeni kot $ Prefix.

        $ NumberFormat = g 5 stikalo ($ 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 "

    Prva vrstica je preprosta generacija naključnih številk, ki izbere, kateri format bomo uporabili za telefonsko številko. Nato preklopni stavek vzame to naključno izbiro in ustvari ustrezno predpono $. Se spomnite seznama neveljavnih vrst telefonskih številk? Vrednosti $ NumberFormat 0-3 ustrezata prvim štirim na tem seznamu. Vrednost 4 lahko ustvari eno od zadnjih dveh, saj oba uporabljata kodo »555«.

    Tukaj lahko vidite tudi, da uporabljamo še en trik z dvojnimi narekovaji. Dvojni narekovaji ne omogočajo le interpretiranja spremenljivk, preden niz dobi izhod - prav tako vam omogočajo obdelavo blokov skriptov. Če želite to narediti, ovijte blok skripta tako: »$ ()«. Torej, to, kar imate zgoraj, je veliko individualno randomiziranih številk, pri čemer so nekatere omejene ali pa so statično določene v skladu s pravili, ki jih moramo upoštevati. Vsak niz ima tudi oklepaje in razmake, kot jih običajno pričakujete v paru področne kode in kode za izmenjavo.

    Zadnja stvar, ki jo moramo storiti, preden bomo pripravljeni za prikaz našega imena in telefonske številke, je ustvariti ID naročnika, ki bo shranjen kot $ Suffix.

        stikalo ($ NumberFormat) $ _ -lt 4 $ Suffix = "$ (g 10) $ (g 10) $ (g 10) $ (g 10)" 4 stikalo ($ Prefix) '( 800) 555 '$ Suffix =' 0199 ' privzeto $ Suffix = "01 $ (g 10) $ (g 10)"

    Zaradi posebnih pravil za številke 555 ne moremo ustvariti le štiri naključne številke za konec vsake telefonske številke, ki jo bo naredil naš skript. Torej, prvo stikalo preveri, če imamo opraviti s številko 555. Če ne, ustvari štiri naključne številke. Če je številka 555, drugo stikalo preveri območno kodo 800. Če se to ujema, obstaja samo en veljaven $ Suffix, ki ga lahko uporabimo. V nasprotnem primeru je dovoljeno izbirati med nič med 0100-0199.

    Upoštevajte, da obstaja nekaj različnih načinov, kako bi ta blok lahko napisal, namesto da bi bil način. Oba preklopna stavka bi lahko bila zamenjana z stavkoma if / else, saj vsak od njiju obravnava le dve možnosti. Poleg tega, namesto da bi izrecno klicali »4« kot možnost za prvo izjavo o preklopu, bi lahko »privzeto« uporabili podobno kot v drugi, saj je bila edina preostala možnost. Izbira med možnostjo if / else vs stikalo ali kjer naj se namesto določenih vrednosti uporabi privzeta ključna beseda, se pogosto nanaša na osebne preference. Dokler deluje, uporabite tisto, kar vam najbolj ustreza.

    Zdaj je čas za izhod.

        Write-Output "$ FirstName $ Priimek $ Prefix-$ Suffix"

    Ta je precej preprosta, kot je v scenariju. Samo izpisuje ime in priimek, ločeno s presledki, nato pa še en prostor pred telefonsko številko. Tu se doda tudi standardna pomišljaj med kodo Exchange in ID naročnika.

    Ta zaprta oklepa na dnu je konec zanke ForEach-Object od prej - izpustite to, če ste jo že dobili.

    5. del: Čiščenje in izvajanje skripta

    Ko je vse delo opravljeno, dober scenarij ve, kako po sebi očistiti. Spet, sprememba spremenljivke spodaj ni nujno potrebna, če želite zagnati skript iz konzole, vendar ga boste želeli, če ga boste kdaj načrtovali v ISE-ju..

    Alias ​​za odstranitev elementa: g Odstranite-spremenljivko skriptno mapo, zahtevane datoteke, priimek, moški, ime, številko, obliko, predpono, pripono, vnos vnosa, uporabniški vnos

    Ko ste vse naredili, shranite skript z razširitvijo ».ps1« v isto mapo kot datoteke z imeni. Prepričajte se, da je vaš ExecutionPolicy nastavljen tako, da lahko skript deluje, in mu dajte vrtinčenje.

    Tukaj je posnetek zaslona skripte v akciji:

    Prenesete lahko tudi datoteko ZIP, ki vsebuje ta skript PowerShell, in besedilne datoteke s seznami imen s spodnjo povezavo.

    Generator naključnih imen in telefonskih številk za PowerShell