10Sep

Kuidas juhuslikke nimesid luua jaTelefoninumbrid PowerShelliga

click fraud protection

Kui teil on vaja testimiseks või tutvustamiseks mõeldud andmekogumit ja see komplekt peab esindama isiklikult identifitseeritavat teavet( PII), ei soovi üldiselt reaalseid andmeid, mis esindavad tegelikke inimesi. Siin tutvustame teile, kuidas saate PowerShelli kasutada selleks, et genereerida juhuslike nimede ja telefoninumbrite loend just selliseks sündmuseks.

Mida on vaja

Enne alustamist on sul mõned tööriistad ja teave, mida peaks olema:

PowerShell

See skript töötati välja PowerShell 4.0-ga ja seda on testitud ka PowerShell 2.0-ga ühilduvuse kohta. PowerShell 2.0 või uuem versioon on Windowsis sisseehitatud alates Windows 7-st. Samuti on see Windows XP ja Vista jaoks saadaval Windows Management Framework( WMF) osana. Järgmised üksikasjad ja allalaadimiste lingid on allpool.

  • PowerShell 2.0 on varustatud Windows 7-ga. Windows XP SP3 ja Vista( SP1 või uuemad) kasutajad saavad Microsoftilt KB968929 vastava WMF-i versiooni allalaadida. Seda ei toeta XP SP2 või allpool või Vista ilma SP1ta.
  • instagram viewer
  • PowerShell 4.0-l on Windows 8.1.Windows 7 hoolduspaketi SP1 kasutajad saavad seda Microsofti allalaadimiskeskusest WMF-i värskenduse osana uuendada. See pole saadaval XP või Vista jaoks.

nimed

Peate sisestama juhuslikku generaatorisse mõningad nimed. Suurepärane allikas -le partiide nimede ja nende populaarsuse kohta( kuigi seda ei kasutata selle skripti jaoks) on Ameerika Ühendriikide loendusbüroo. Allolevatel linkidel olevad loendid on väga suured, nii et võite soovida neid natuke ümber lõigata, kui plaanite luua korraga palju nimesid ja numbreid. Meie katsesüsteemis võtsid kõik nimede / numbrite paarid täielike loendite loomiseks umbes 1,5 sekundit, kuid teie läbisõit varieerub sõltuvalt teie enda süsteemi spetsifikatsioonidest.

  • Perekonnanimed
  • Mehed Esimesed nimed
  • Naise esimesed nimed

Sõltumata kasutatavast allikast tuleb teil luua kolm tekstifaili, mida skript saab nime valimiseks kasutada basseinidena. Iga fail peaks sisaldama ainult nimesid ja ainult ühte nime rea kohta. Neid tuleb salvestada PowerShelli skriptiga samas kaustas.

Surnames.txt peaks sisaldama perekonnanimesid, mida skript valida soovite. Näide:

Smith Johnson Williams Jones Browni

Males.txt peaks sisaldama meeste eesnimesid, mida skript valida soovib. Näide:

James John Robert Michael William

Females.txt peaks sisaldama naiste eesnimesid, mida skript valida soovib. Näide:

Mary Patricia Linda Barbara Elizabeth

Telefoninumbrite reeglid

Kui soovite olla kindel, et teie telefoninumbrid ei vasta kellegi päris telefoninumbrile, siis on lihtsaim viis kasutada tuntud "555" vahetuskoodi. Kuid kui hakkate näitama hulga telefoninumbritega andmekomplekti, hakkab see 555 päris monotoonne reaalajas kiiresti nägema. Asjade huvitavamaks muutmiseks genereerime teisi telefoninumbreid, mis rikuvad Põhja-Ameerika numbrimiskava( NANP) eeskirju. Allpool on mõned vale telefoninumbrid, mis esindavad iga skript genereeritava arvu klassi:

  • ( 157) 836-8167
    See number on vigane, kuna pindalad ei saa alata 1 või 0.
  • ( 298) 731-6185
    See number on kehtetu, kuna NANP ei anna teise numbriga 9-kohalist koodi.
  • ( 678) 035-7598
    See number on kehtetu seetõttu, et Exchange koodid ei saa alata 1 või 0.
  • ( 752) 811-1375
    See number on vigane, kuna Exchange koodid ei saa lõppeda kahe 1s-ga.
  • ( 265) 555-0128
    See number on kehtetu, kuna Exchange kood on 555, ja , siis on Subscriber ID fiktiivsete numbrite jaoks reserveeritud vahemikus.
  • ( 800) 555-0199
    See number on ainus 800 number, mille 555 vahetuskoodeks on reserveeritud kasutamiseks fiktiivse numbriga.

Pange tähele, et ülaltoodud eeskirjad võivad muutuda ja need võivad jurisdiktsioonis erineda. Te peaksite tegema oma uurimistööd, et kontrollida kehtivaid eeskirju, mis kehtivad selle lingi jaoks, mille jaoks teete telefoninumbreid.

ühised käsud

On olemas suhteliselt tavalisi käske, mida hakatakse kasutama kogu selle skripti jooksul, nii et peaksite saama põhiidee selle kohta, mida need tähendavad, enne kui me sukeldume selle kirja panemiseks.

  • ForEach-Object võtab objektide massiivi või nimekirja ja täidab määratud toimingu igaüks neist. ForEach-Objekti skriptiploki puhul kasutatakse $ _ muutuja, mis viitab käimasolevale objektile, mida töödeldakse.
  • kui. .. muud avaldused lubavad teil toiminguid teostada ainult siis, kui on täidetud teatavad tingimused ja( vajadusel) täpsustatakse, mida tuleks teha, kui seda tingimust ei täideta.
  • lüliti avaldused on nagu suurema valiku avaldustega. Lüliti kontrollib objekti mitmete tingimuste vastu ja käivitab kõik skriptikloodid tingimustele, mida objekt vastab. Samuti võite valikuliselt määrata vaikeploki, mis käivitub ainult siis, kui ühtegi muud tingimust ei sobi. Määra lülitite avaldused kasutavad ka $ _ -muudat, mis viitab käimasolevale objektile, mida töödeldakse.
  • kui avaldused võimaldavad teil skriptikloke pidevalt korrata nii kaua, kui on täidetud teatud tingimus. Kui midagi juhtub, mis põhjustab tingimuse, et skriptikeel on lõpetatud, ei ole see enam õige, siis loop väljub.
  • proovige. .. saagi avaldused aitavad vea käsitlemisel. Kui proovitüki jaoks määratud skriptiplokk läheb valesti, käivitatakse püügiplokk.
  • Get-Content teeb seda, mida ütleb tina. See saab kindla objekti sisu - tavaliselt faili. Seda saab kasutada konsooli tekstifaili sisu kuvamiseks või selle skripti kaudu mööda gaasijuhtme sisu, mida kasutada koos teiste käskudega.
  • Write-Host paneb konsoolis asju. Seda kasutatakse kasutajale sõnumite esitamiseks ja see ei kuulu skripti väljundisse, kui väljundit suunatakse ümber.
  • kirjutuv väljund kasutab tegelikult väljundit. Tavaliselt laaditakse see konsooli alla, kuid seda saab suunata ka teiste käskude abil.

Skriptis on ka teisi käske, kuid me selgitame neid nii nagu me läheme.

Script

loomine Nüüd on aeg oma käed räpane saada.

1. osa: valmisolekusse mine

Kui sulle meeldib sinu skript, et käivitada seda puhast konsooli, siis siin on esimene rida, mida soovite.

Clear-Host

Nüüd, kui meil on puhas ekraan, on järgmine asi, mida me tahame teha, on skriptikontroll, et veenduda, et kõik, mida ta vajab, on paigas. Selleks peate alustama, rääkides, kust seda vaadata ja mida otsida.

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

Esimene rida on igale skriptile väga kasulik. See määrab muutuja, mis viitab skripti sisaldavale kausta. See on hädavajalik, kui teie skript vajab teisi faile, mis asuvad samas kataloogis endas( või selle kataloogi teadaolevast suhtelisest asukohast), kuna muidu ilmnevad vead, kui proovite skripti käivitada, kui olete mõnes teisestöökataloog.

Teine rida loob failide nimede hulga, mis on skripti õigesti töötamiseks vaja. Me kasutame seda koos $ ScriptFolder muutujaga järgmises töös, kus kontrollime, kas need failid on olemas.

$ RequiredFiles |ForEach-Object{ if( !( Test-Path "$ ScriptFolder \ $ _")){ Write-Host "$ _ ei leitud."-ForegroundColor Red $ MissingFiles ++}}

See skripti rida saadab $ RequiredFiles massiivi ForEach-Objekti plokki. Selles skriptiblokis kasutab IF-aruanne Test-Pathi, et näha, kas otsitav fail on see, kuhu see kuulub. Test-tee on lihtne käsk, mis faili tee loomisel tagastab tõese või vale vastuse, mis meile räägib, kui tee osutab midagi, mis on olemas. Hüüumärgis on , mitte operaator, mis muudab test-tee reageeringu enne, kui see edastatakse if-avaldusele. Nii et kui Test-Path tagastab vale( see tähendab, et otsitavat faili ei eksisteeri), teisendatakse see trueks, nii et IF-avaldus käivitab selle skriptikloki.

Siin on veel üks asi, mida selles skriptis tihti kasutatakse, on topelt-hinnapakkumiste kasutamine ühe hinnapakkumiste asemel. Kui paned midagi ühe hinnapakkumisi, siis käsitleb PowerShell seda staatilise stringina.Ükskõik, mis ühes hinnapakkumistes on, viiakse täpselt nii nagu on. Topeltkvoodid ütlevad PowerShellile muutujate ja mõnede muude stringi tõlkimiseks enne selle möödu mist. Siin tähendab topeltkutsete, et Test-Path'i $ ScriptFolder \ $ _ ' käitamise asemel teeme tegelikult midagi sellist nagu Test-Path' C: \ Scripts \ Surnames.txt '( eeldades, et teieskript on C: \ Skriptides ja igaühe objekt töötab praegu "Surnames.txt").

Iga faili ei leita, kirju-võõrustaja postitab veateate punasega, mis annab teile teada, milline fail on puudu. Seejärel suurendab järjestikune $ MissingFiles muutuja, mida kasutatakse järgmises tükis, viga ja lõpetage failide puudumine.

if( $ MissingFiles){ Write-Host "Ei leia $ MissingFiles lähtefaili( -id). Katkesta skript."-ForegroundColor Red Remove-Variable ScriptFolder, RequiredFiles, MissingFiles Exit}

Siin on veel üks puhas trikk, mida saate teha avaldustega. Enamik juhendeid näete, kas avaldused ütlevad sulle, et kasutaksite vastava tingimuse kontrollimiseks operaatorit. Näiteks siin võime kasutada kui( $ MissingFiles -gt 0) , et näha, kas $ MissingFiles on nullist suurem. Siiski, kui kasutate juba käske, mis tagastab loogilise väärtuse( nagu eelmises plokis, kus kasutasime Test-Path), pole see vajalik. Seda saab teha ka ilma selleta sellistel juhtudel, kui proovite lihtsalt kontrollida, kas number ei ole null. Iga mitte-nullinumbrit( positiivne või negatiivne) loetakse tõeks, kuid null( või, nagu siin võib juhtuda, olematu muutuja) käsitletakse kui valet.

Kui $ MissingFiles on olemas ja ei ole null, kirjutab käsk post sõnum, mis ütleb teile, kui palju faile on kadunud ja skript katkestatakse. Seejärel eemaldab eemaldatav muutuja kõik välja töötatud muutujad ja Exit sulgub skripti. Regulaarsel PowerShelli konsoolil ei ole Remove-Variable jaoks selle konkreetse eesmärgi jaoks tegelikult vajalik, sest skriptidega määratud muutujad eemaldatakse skripti korral. Kuid PowerShell ISE käitub veidi teisiti, nii et võite seda säilitada, kui kavatsete skripti käivitamiseks sealt käitada.

Kui kõik asjad on korras, jätkub skript. Veel üks ettevalmistus teha on alias, mille pärast me tõesti rõõmustame.

New-Alias ​​g Get-Random

Kasutajad kasutavad alternatiivsete nimede loomiseks käskude jaoks. Need võivad olla kasulikud uuele liidesele tutvustamiseks( nt: PowerShellil on sisseehitatud aliased nagu dir -> Get-ChildItem ja kass -> Get-Content ) või lühijuhendite tegemiseksüldkasutatavate käskude jaoks. Siin valmistame väga käsiraamatu Get-Random käskluse, mida hakatakse kasutama palju hiljem.

Get-Random päris palju muudab selle, mida selle nimi viitab. Arvestades massiivi( nt nimede loendit) sisendina, valib ta massiivist juhusliku elemendi ja vallandab selle välja. Seda saab kasutada ka juhuslike numbrite genereerimiseks. Hübriidide ja numbrite meeles pidamine on see, et see, nagu paljudel teistel arvutioperatsioonidel, hakkab nulli lugema. Seega Get-Random 10 asemel tähendab see seda, et looduslikum "anna mulle number 1-10" tähendab see tõepoolest "andke mulle number 0 kuni 9." Võite olla täpsem numbrite valimise kohta, nii et saate-Random käitub rohkem nagu oleksite loomulikult oodata, kuid me ei vaja seda skripti.

2. osa: kasutajate sisestamine ja tööle asustamine

Kuigi skript, mis genereerib vaid üht juhuslikku nime &telefoninumber on suurepärane, on palju parem, kui skript võimaldab kasutajal määrata, kui palju nimesid &numbrid, mida nad soovivad saada ühes partiis. Kahjuks ei saa me tõesti usaldada kasutajatele alati õiget sisendit. Niisiis, seal on väike natuke rohkem kui lihtsalt $ UserInput = Read-Host .

kui( ! $ ValidInput){ try{ [int] $ UserInput = Read-Host -Prompt 'genereeritavad artiklid $ ValidInput = $ true} catch{ Write-Host' Kehtetu sisend. Sisestage ainult number. '-ForegroundColor Punane}}

Ülal esitatud aruanne kontrollib ja tühistab $ ValidInput väärtuse. Kui $ ValidInput on vale või ei eksisteeri, jätkab see skriptikloki kaudu loopimist.

Proovi avaldus võtab kasutaja sisendiks läbi Read-Host'i ja üritab seda teisendada tervikväärtusena.(See on [int] enne Read-Host'i.) Kui see on edukas, määrab see $ ValidInput tõele, nii et samal ajal loop saab väljuda. Kui see ei õnnestu, kuvatakse saagi blokeerimisel viga ja kuna $ ValidInput ei saanud seatud, pöördub ajalt silmus ümber ja palub kasutaja uuesti.

Kui kasutaja on korralikult sisestanud numbri, soovime, et skript teataks, et ta hakkab tegelikult oma tööd tegema ja seejärel hakkab seda tegema.

Write-Host "" nGenerating $ UserInput nimed ja telefoninumbrid. Palun kannatlik. "N" 1. . $ UserInput |ForEach-Object{ & lt; # INSERT RANDOM NAME &NUMBER GENERATOR SIIN # & gt;}

Ärge muretsege, me ei kavatse jätta teid ise välja, et välja selgitada juhuslik nimi ja &numbri genereerija kood. See on lihtsalt kohahoidja kommentaar, mis näitab teile, kuhu järgmine sektsioon( kus tegelik töö tehakse) sobib.

Kirjutamis-rida on üsna lihtne. See lihtsalt ütleb, kui palju nimesid ja telefoninumbreid skript hakkab genereerima, ning palub kasutajal olla kannatlik, kuni skript töötab. `n stringi alguses ja lõpus on sisestada tühimärk enne ja pärast väljundit, vaid selleks, et anda sisendjoone ja nimede loendi vahel visuaalne lahus &numbrid. Pidage meeles, et see on tagakärv( AKA "tõsine aktsent" - tavaliselt pealkirja kohal olev vahekaart vasakul 1-st), mitte aga iga n ees olev apostroop või üksikpakkumine.

Järgmises osas on näidatud teistsugune viis, kuidas saate kasutada ForEach-Objekti silmust. Tavaliselt, kui soovite, et skriptiplokk käivitaks teatud arvu rea, seadistame loogilise režiimi, näiteks ( $ x = 1; $ x -le $ UserInput; $ x ++){ & lt; # INSERT SCRIPTSIIN #>. ForEach-Object võimaldab meil seda lihtsustada, lisades selle täisarvude loetelusse ja selle asemel, et öelda, et ta kasutab tegelikult nende täisarvudega midagi, esitame sellele ainult staatilise skriptikabli, kuni see täisarvudest välja jookseb.

3. osa: Juhusliku nimega

genereerimine Nime genereerimine on selle protsessi kõige lihtsam bit. See koosneb ainult kolmest etapist: perekonnanimi, soo valimine ja eesnimi valimine. Pidage meeles, et mõni aeg tagasi andisime varem Get-Randomi nimel tagasi? Aeg hakata seda kasutama hakata.

$ Perekonnanimi = Get-Content "$ ScriptFolder \ Surnames.txt" |g $ Male = g 2 kui( $ mees){ $ FirstName = Get-Content "$ ScriptFolder \ Males.txt" |g} else{ $ FirstName = Get-Content "$ ScriptFolder \ Females.txt" | |g}

Esimeses reas võetakse meie perekonnanimede loend, edastatakse see juhuslikule valijale ja määrab valitud nime $ perekonnanimele.

Teine rida valib meie isiku soo. Pea meeles, kuidas Get-Random hakkab loendama nulli ja kuidas null on vale ja kõik muu on tõene? Nii kasutame Get-Random 2 -d( või palju lühemat g 2 tänu meie nimele - mõlemad põhjustavad valikut nulli või ühe), et otsustada, kas meie mees on meessoost või mitte. Kui / else avaldus valib seejärel juhuslikult mehe või naise nime vastavalt.

4. osa: Juhusliku telefoninumbri

genereerimine Siin on tõesti lõbus osa. Varem me näitasime teile, kuidas on mitmel moel võimalik teha vale või fiktiivset telefoninumbrit. Kuna me ei soovi, et kõik meie numbrid oleksid üksteisele liiga sarnased, valime juhuslikult vale numbrivormingu iga kord. Juhuslikult valitud vormingud määratletakse nende piirkonnakoode ja valuutakoodiga, mida hoitakse kollektiivselt $ prefiksina.

$ NumberFormat = g 5 switch( $ NumberFormat){ 0{ $ Prefix = "($( g 2) $( g 10) $( g 10)) $( g 10) $( g 10) $( g 10)"$ 1( $ 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 "}}

Esimene rida on otsene juhuslik arv genereerimine,me läheme telefoninumbri juurde. Seejärel lülitab avaldus välja juhusliku valiku ja genereerib vastavalt $ prefiksi. Pea meeles, et kehtetute telefoninumbrite tüüpide nimekiri?$ NumberFormat väärtused 0-3 vastavad selle loendi esimesele neljale. Väärtus 4 võib luua ühe kahest viimasest, kuna mõlemad kasutavad vahetuskoodi 555.

Siin näete ka, et kasutame topelt-hinnapakkumisi kasutades mõnda muud trikki. Topelt-hinnapakkumised ei lase teil tõlgendada muutujaid enne, kui string väljub - need võimaldavad teil ka skriptiklokeid töödelda. Selleks paneerite skriptikloki selliseks: "$( )" .Nii et ülaltoodud on palju individuaalselt randomiseeritud numbreid, mõned neist on kas piiratud nende vahemikus või seatud staatiliselt vastavalt eeskirjadele, mida peame järgima. Igal stringil on ka sulgudes ja vahekaugusena, mida tavaliselt peaksite vaatama piirkonnakoodis ja Exchange-koodide paaris.

Viimane asi, mida peame tegema, enne kui oleme valmis oma nime ja & nbsp;telefoninumber on luua Subscriber ID, mida hoitakse $ Suffix.

lüliti( $ NumberFormat){ {$ _ -lt 4}{ $ Suffix = "$( g 10) $( g 10) $( g 10) $( g 10)"} 4{ switch( $ prefiks)(800) 555 '{$ Suffix =' 0199 '} vaikimisi{ $ Suffix = "01 $( g 10) $( g 10)"}}}}

555 numbrite erieeskirjade tõttu ei saa me lihtsaltgenereerige neli juhuslikku numbrit iga telefoninumbri lõpus, mida meie skript kavatseb teha. Nii et esimene lüliti kontrollib, kas me tegeleme 555-ga. Kui ei, siis see genereerib neli juhuslikku numbrit. Kui see number on 555, kontrollib teine ​​lüliti 800 suunakoodi. Kui see sobib, on ainult üks kehtiva $ Suffix, mida saame kasutada. Vastasel juhul on sellel lubatud midagi valida 01.00-0199.

Pange tähele, et selle ploki võib olla kirjutatud mitmel erineval moel, selle asemel, et see oleks. Mõlemad lülitusaruanded oleksid võinud asendada avaldustega / else, kuna need ainult käsitlevad kahte valikut. Selle asemel, et spetsiaalselt välja kutsuda "4" esimese lüliti avalduse valikuvõimalusena, oleks võinud kasutada vaikimisi samamoodi, nagu see oli tehtud teises, kuna see oli ainus võimalus jäänud. Valiku vahel, kas / else vs switch või kus kasutada vaikimisi märksõnu konkreetsete väärtuste asemel, tehakse sageli isiklikke eelistusi. Niikaua kui see töötab, kasutage seda, mis teile kõige rohkem meeldib.

Nüüd on aeg väljundiks.

kirjutamise väljund "$ FirstName $ Perekonnanimi $ Prefix- $ Suffix"}

See on üsna lihtne kui see skripti saab. See lihtsalt väljastab ees- ja perekonnanime tühikutega ja seejärel teise numbriga enne telefoninumbrit. Siin on koht, kus lisatakse vahetuskoodi ja abonendi ID vaheline standardne sidekriips.

See altpoolt olev sulgemiskinnitus on ForEach-Objekti loopi lõpus varasemast - jätke see ära, kui olete seda juba saanud.

5. osa: skripti puhastamine ja käitamine

Pärast kogu töö lõpetamist teab hea skript iseenda puhastamiseks. Veelgi enam, allpool olev muutuja eemaldamine pole tegelikult vajalik, kui kavatsete skripti ainult konsoolis käivitada, kuid soovite seda, kui olete kunagi kavas seda ISE-is käitada.

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

Kui olete selle teinud, salvestage skript laiendiga. ps1samas kataloogis nagu teie nimedefailid. Veenduge, et teie ExecutionPolicy on seatud nii, et skript suudab käivitada ja anda sellele keerdu.

Siin on skripti ekraanipilt tegevuses:

Võite alla laadida ka ZIP-faili, mis sisaldab seda PowerShell-skripti, ja nime-loendeid sisaldavaid tekstifaile alljärgnevast lingist.

juhuslik nimi ja & nbsp;PowerShelli

telefoninumbri generaator