10Sep

Како генерирати случајна имена & амп;Телефонски бројеви са ПоверСхелл

Када вам је потребан сет података за тестирање или демонстрацију, а тај скуп мора да представља Лични подаци( ПИИ), обично не желите да користите стварне податке који представљају стварне људе.Овдје ћемо вас провести кроз како можете да користите ПоверСхелл да бисте генерирали листу случајних имена и телефонских бројева за само такву прилику.

Шта вам треба

Пре него што започнете, постоје неки алати и информације које треба да имате:

ПоверСхелл

Ова скрипта је развијена користећи ПоверСхелл 4.0, а такође је тестирана за компатибилност са ПоверСхелл 2.0.ПоверСхелл 2.0 или новији је уграђен у Виндовс од Виндовс 7. Такође је доступан за Виндовс КСП и Виста као део Виндовс Манагемент Фрамеворк-а( ВМФ).Неки додатни детаљи и линкови за преузимање су испод.

  • ПоверСхелл 2.0 долази са оперативним системом Виндовс 7. Корисници Виндовс КСП СП3 и Виста( СП1 или новији) могу да преузму одговарајућу ВМФ верзију из Мицрософт-а у КБ968929.Није подржан на КСП СП2 или ниже, или Виста без СП1.
  • ПоверСхелл 4.0 долази са Виндовс 8.1.Корисници оперативних система Виндовс 7 СП1 могу да га надоградјују као део ВМФ ажурирања из Мицрософт Довнлоад Центра.Није доступан за КСП или Виста.

Називи

Потребне су вам неке листе имена која се уносе у случајни генератор.Одличан извор ​​серије имена и информација о њиховој популарности( иако се неће користити за ову сценарију), је Биро за попис Сједињених Држава.Листе које су доступне на доленаведеним линијама су веома велике, тако да бисте можда требали да их исечите мало ако планирате генерисати много имена и бројева одједном.На нашем тест систему сваки пар имена / броја трајао је око 1,5 секунде да би генерисао коришћење целих листа, али ваша километража ће се разликовати у зависности од ваших спецификација система.

  • Презиме
  • Мушко Прво Име
  • Женско Прво Име

Без обзира на извор који користите, мораћете да генеришете три текстуалне датотеке које скрипту могу користити као базу за избор имена.Свака датотека треба да садржи само имена, а само једно име по линији.Ове датотеке морају бити ускладиштене у истој фасцикли као и ПоверСхелл скрипта.

Сурнамес.ткт треба да садржи презимена из којих желите да изаберете скрипту.Пример:

Смит Јохнсон Виллиамс Јонес Бровн

Малес.ткт треба да садржи имена мушких мушкараца од којих желите одабрати скрипту.Пример:

Џејмс Џон Роберт Мајкл Вилијам

Фемалес.ткт треба да садржи женске имена која желите да скрипту изаберу.Пример:

Мари Патрициа Линда Барбара Елизабетх

Правила за телефонске бројеве

Ако желите да будете сигурни да се ваши телефонски бројеви не подударају са стварним телефонским бројем никога, најлакши начин је коришћење познатог Екцханге 555 кода.Али, ако ћете показивати скуп података са пуно телефонских бројева, 555 ће почети изгледати прилично монотоно стварно брзо.Да би ствари биле интересантније, генерисали бисмо и друге бројеве телефона који крше правила северноамеричког планирања броја( НАНП).Испод су неки узорак неважећих телефонских бројева, који представљају сваку класу броја који ће бити генерисани овом скриптом:

  • ( 157) 836-8167
    Овај број је неважећи зато што подручни кодови не могу почети са 1 или 0.
  • ( 298) 731-6185
    Овај број је неважећи зато што НАНП не додељује позивни број подручја са 9 као другу цифру.
  • ( 678) 035-7598
    Овај број је неважећи зато што Екцханге кодови не могу почети са 1 или 0.
  • ( 752) 811-1375
    Овај број је неважећи зато што Екцханге кодови не могу да се заврше са два 1с.
  • ( 265) 555-0128
    Овај број је неважећи јер је Екцханге код 555, и ИД претплатника је у опсегу резервисаном за фиктивне бројеве.
  • ( 800) 555-0199
    Овај број је једини 800 број са 555 Екцханге Екцханге кодом који је резервисан за употребу као фиктивни број.

Имајте на уму да горе наведена правила подлежу променама и могу се разликовати према надлежности.Требали би урадити своје истраживање како бисте потврдили тренутна правила која се примјењују на локалу за коју ћете генерисати телефонске бројеве.

Цоммон Цоммандс

Постоје неке прилично уобичајене команде које ће се користити током читаве скрипте, па би требало да добијете основну идеју о томе шта то значи пре него што се уронимо у стварно писање.

  • ФорЕацх-Објецт преузима низ или листу објеката и извршава наведену операцију на сваком од њих.У оквиру скрипта ФорЕацх-Објецт, променљива $ _ се користи да се односи на тренутно обрађену ставку.
  • ако. .. остали изјаве вам омогућавају да извршите операцију само ако су испуњени одређени услови и( опционо) наведите шта треба урадити када то стање није испуњено.
  • излази изјаве су као ако изјаве имају више избора.Прекидач ће проверити објекат у односу на неколико услова и покренути све блокове скрипте које су специфициране за услове које објекат одговара.Такође можете, опционо, одредити подразумевани блок који ће се покренути само ако се не подударају други услови.Измените изјаве такође користе $ _ варијаблу да се односе на тренутну обраду који се обрађује.
  • док изјаве омогућавају континуирано понављање блока скрипти све док је одређени услов испуњен.Када се нешто деси, узрокује да стање више није тачно када је блок скрипте завршен, петица излази.
  • пробајте. .. ухвати изјаве помажу у обради грешака.Ако било шта крене са погрешним блоком сценарија за покушај, поклопац ће се покренути.
  • Гет-Цонтент ради оно што пише на лимену.Добија садржај одређеног објекта - обично датотека.Ово се може користити за приказ садржаја текстуалне датотеке на конзоли или, као у овој скрипти, проследити садржај дуж цјевовода који се користи са другим командама.
  • Врите-Хост ставља ствари у конзолу.Ово се користи за приказивање порука кориснику и није укључено у излаз скрипте ако се излаз преусмери.
  • Врите-Оутпут заправо генерише излаз.Уобичајено је да се ово баци на конзолу, али такође може бити преусмерено другим командама.

У скрипти постоје друге команде, али ћемо их објаснити како идемо.

Изградња скрипте

Сада је време да се наше руке прљаве.

Део 1: Припрема за покретање

Ако вам се свидела ваша скрипта да почне да се покреће са чистог конзоле, ево прве линије коју желите у њему.

Цлеар-Хост

Сада када имамо чист екран, следећа ствар коју желимо да урадимо је да проверите скрипту како би осигурали да је све потребно.Да би то учинили, морамо почети тако што ћемо му рећи где да гледамо и шта треба тражити.

$ СцриптФолдер = Сплит-Патх $ МиИнвоцатион.МиЦомманд.Дефинитион -Парент $ РекуиредФилес =( 'Малес.ткт', 'Фемалес.ткт', 'Сурнамес.ткт')

Прва линија је веома корисна за било коју скрипту.Она дефинира променљиву која указује на фасциклу која садржи скрипту.Ово је од суштинског значаја ако вашем скрипту требају и друге датотеке које се налазе у истом именику као и сама( или позната релативна путања из тог директоријума), јер ћете иначе наићи на грешке ако и када покушате покренути скрипту док сте у другомрадни директоријум.

Друга линија креира низ имена датотека која су потребна да се скрипта правилно ради.Користићемо ово, заједно са променљивом $ СцриптФолдер, у следећем делу где ћемо проверити да ли су ти фајлови присутни.

$ РекуиредФилес |ФорЕацх-Објецт{ иф( !( Тест-Патх "$ СцриптФолдер \ $ _")){ Хост-Врите "$ _ не најдено."-ФорегроундЦолор Ред $ МиссингФилес ++}}

Овај део скрипте шаље $ РекуиредФилес низ у блок ФорЕацх-Објецт.У оквиру тог блока скрипта, ако изјава користи Тест-Патх да би видела да ли је датотека коју тражимо тамо где она припада.Тест-пут је једноставна команда која, када добије путању датотеке, враћа основни тачан или лажни одговор да нам каже да ли пут показује на нешто што постоји.Ту узвичење је не оператер, који преусмерава одговор тест-стаза пре него што га проследи на изјави ако.Дакле, ако се Тест-Патх врати неисправно( то јест, датотека коју тражимо не постоји), она ће бити претворена у труе, тако да ће изјава извршити њен блок скрипти.

Још једна ствар која овде треба да се прикаже, која ће се често користити у овој скрипти, је коришћење двоструких навода умјесто појединачних навода.Када ставите нешто у појединачне цитате, ПоверСхелл га третира као статичку низ.Шта год да је у појединачним цитатима, доноси се тачно као-је.Двоструки цитати говоре ПоверСхеллу да преведе варијабле и неке друге посебне ставке у низу пре него што их пренесете.Ево, двоструки наводи значе да уместо да покренемо Тест-Патх '$ СцриптФолдер \ $ _' , заправо ћемо радити нешто више као Тест Патх "Ц: \ Сцриптс \ Сурнамес.ткт" ( уз претпоставкускрипта је у Ц: \ Сцриптс, а ФорЕацх-Објецт тренутно ради на 'Сурнамес.ткт').

За сваку датотеку која није пронађена, Врите-Хост ће објавити поруку о грешци црвеном бојом која ће вам рећи која датотека недостаје.Затим повећава $ МиссингФилес варијаблу која ће се користити у сљедећем комаду, да грешку и престанете ако постоје било какве датотеке недостају.

ако( $ МиссингФилес){ Врите-Хост "Не могу пронаћи изворне датотеке $ МиссингФилес. Прекидање скрипти."-ФорегроундЦолор Ред Уклони-варијабилни СцриптФолдер, РекуиредФилес, МиссингФилес Екит}

Ево вам још један уредан трик који можете урадити ако изјаве.Већина водича ће вам се обратити ако вам изјаве кажу да користите оператора да бисте проверили услове који одговарају.На пример, овде можемо користити ако( $ МиссингФилес -гт 0) да видимо да ли је $ МиссингФилес већа од нуле.Међутим, ако већ користите команде које враћају боолеан вриједност( као у претходном блока гдје смо користили Тест-Патх) то није неопходно.Такође можете и без њега у оваквим случајевима, када само тестирате да видите да ли је број нула.Сваки нултални број( позитиван или негативан) се третира као тачан, док је нула( или, као што се овде може догодити, непостојећа варијабла) третирати као лажна.

Ако $ МиссингФилес постоји и није нула, Врите-Хост ће објавити поруку која вам говори колико датотека недостаје и да ће скрипта прекинути.Затим, Ремове-Вариабле ће очистити све променљиве које смо креирали и Екит ће напустити скрипту.На редовној ПоверСхелл конзоли, Ремове-Вариабле заиста није потребан за ову одређену сврху јер се променљиве постављене скриптама обично одбацују када се скрипта изађе.Међутим, ПоверСхелл ИСЕ се понаша мало другачије, тако да можете ово задржати ако планирате да покренете скрипту одатле.

Ако су све ствари у реду, скрипта ће наставити даље.Још једна припрема за прављење јесте алиас који ће нам бити драго што ћемо касније.

Нев-Алиас г Гет-Рандом

Алиасес се користе за креирање алтернативних имена за наредбе.Ово може бити корисно да нам помогне да се упознамо са новим интерфејсом( нпр. ПоверСхелл има уграђене алијасе као што су дир -> Гет-ЦхилдИтем и цат -> Гет-Цонтент ) или да направите краткорочне референцеза најчешће коришћене команде.Овдје ћемо направити врло кратко референтну за Гет-Рандом наредбу која ће се користити много касније.

Гет-Рандом прилично ради оно што његово име подразумева.С обзиром на низ( као списак имена) као улаз, он избацује случајну ставку из поља и излази из ње.Такође се може користити за генерисање случајних бројева.Оно што треба запамтити о Гет-Рандом и бројевима јесте то што, као и многе друге операције рачунара, почиње рачунати од нуле.Дакле, уместо Гет-Рандом 10 што значи природније "дајте ми број од 1 до 10" то заиста значи "дајте ми број од 0 до 9." Можете бити прецизнији о избору броја, тако да се-Рандом се понаша више као што би се природно очекивало, али то неће бити потребно у овом сценарију.

Дио 2: Добијање корисничког уписа и почетка рада

Док је скрипта која генерише само једно насумично име & амп;број телефона је одличан, много је боље ако скрипту дозволи кориснику да одреди колико имена и амп;бројеве које желе добити у једној серији.Нажалост, не можемо стварно веровати корисницима да увек дају важећи унос.Дакле, мало је више за ово него само $ УсерИнпут = Реад-Хост .

док( ! $ ВалидИнпут){ три [[инт] $ УсерИнпут = Реад-Хост -Промпт 'Ставке које треба генерисати' $ ВалидИнпут = $ труе} ухвати{ Врите-Хост 'Инвалид инпут.Унесите само број. '-ФорегроундЦолор Ред}}

Горња реченица проверава и негира вредност $ ВалидИнпут.Све док $ ВалидИнпут буде лажан, или не постоји, он ће задржати петље кроз свој блок скрипти.

Изјава о покушају узима корисникски улаз, преко Реад-Хост-а, и покушава да је претвори у целобројну вриједност.(То је [инт] пре Реад-Хоста.) Ако је успјешно, он ће поставити вриједност $ ВалидИнпут на исту, тако да петља може изаћи.Ако није успјешно, блок за ухват поставља грешку и, пошто се $ ВалидИнпут није поставио, петље за вријеме ће се вратити около и потврдити корисника.

Када корисник правилно додели број као улаз, желимо да скрипта објављује да ће почети заправо радити свој посао, а потом и да то уради.

Врите-Хост "` нГенератинг $ УсерИнпут имена и бројеве телефона. Молим, будите стрпљиви.`н "1. . $ УсерИнпут |ФорЕацх-Објецт{ & лт; # ИНСЕРТ РАНДОМ НАМЕ & амп;НУМЕР ГЕНЕРАТОР ОВДЕ # & гт;}

Не брините, нећемо вас оставити сами да сазнате насумично име & амп;број генератора код.То је само коментари места који вам показују где ће се следећи одељак( где се прави посао) уклапа.

Линија Врите-Хост је прилично једноставна.Једноставно говори о томе колико ће имена и бројева које скрипта генерише и тражи од корисника да буде стрпљив док скрипта ради свој рад. на почетку и крају стринга је да се убаци празна линија пре и после тог излаза, само да би се направила нека визуелна раздвојеност између улазне линије и листе имена & амп;бројеви.Имајте на уму да је то позадински тастер( АКА "тежак нагласак" - обично кључ изнад табице, лево од 1), а не апостроф или појединачни цитат испред сваког н .

Следећи део приказује другачији начин кориштења ФорЕацх-Објецт петље.Обично, када желите да скриптни блок покрене одређени број пута, поставићете редовну петљу као што је за( $ к = 1; $ к -ле $ УсерИнпут; $ к ++){ & лт; # ИНСЕРТ СЦРИПТХЕРЕ # & гт;}. ФорЕацх-Објецт нам омогућава да поједноставимо ово тако што ћемо му дати попис целих бројева и уместо да му кажемо да уствари нешто радимо с тим интегерима, ми једноставно дамо статички блок скрипта за покретање док се не заврши са интегерима за то.

Дио 3: Генерисање случајног имена

Генерисање имена је најједноставнији део остатка овог процеса.Састоји се само три корака: одабира презимена, одабир пола и одабир имена.Сећате ли се да је тај назив који смо направили за Гет-Рандом неко време?Време је да почнемо да га користимо.

$ Сурнаме = Гет-Цонтент "$ СцриптФолдер \ Сурнамес.ткт" |г $ Мушко = г 2 ако( $ Мушко){ $ ФирстНаме = Гет-Цонтент "$ СцриптФолдер \ Малес.ткт" |г} елсе{ $ ФирстНаме = Гет-Цонтент "$ СцриптФолдер \ Фемалес.ткт" |г}

Прва линија узима нашу листу презимена, храни је у рандом пицкер и додељује изабрано име $ Сурнаме.

Друга линија означава пол наше особе.Сетите се како Гет-Рандом почиње да се рачуна од нуле, и како је нула лажна и све друго је истинито?Тако користимо Гет-Рандом 2 ( или много краћи г 2 захваљујући нашем алиасу - оба резултирају у избору између нуле или оне) како би одлучили да ли је наша особа мушко или не.Изјава иф / елсе након тога насумично бира мушко или женско име у складу с тим.

Део 4: Генерисање случајног броја телефона

Ево стварно забаваног дела.Раније смо показали како имате неколико начина да направите неважећи или фиктивни телефонски број.Пошто не желимо да сви наши бројеви изгледају сувише слични једни другима, случајно ћемо изабрати сваки погрешан формат броја.Насумично одабрани формати ће бити дефинисани помоћу њиховог Ареа Цоде и Екцханге Цоде-а, који ће се колективно чувати као $ Префик.

$ НумберФормат = г 5 свитцх( $ НумберФормат){ 0{ $ Префик = "($( г 2) $( г 10) $( г 10)) $( г 10) $( г 10) $"${ Г 10) $( г 10) $}"{ $ Префик = "($( г 10)$( г 10) $( г 10)) $( г 2) $( г 10) $( г 10) "} 3{ $ Префик =") $( г 10) 11 "} 4{ $ Префик ="( $( г 10) $( г 10) $( г 10)) 555 "}}

Прва линија је директна генерација случајних бројевапратићемо телефонски број.Затим, изјава прекидача узима тај случајни избор и генерише $ Префик.Запамтите ту листу неважећих типова телефонских бројева?Вредности $ НумберФормат 0-3 одговарају првим цетири на тој листи.Вредност 4 може генерисати једну од последња два, обоје користе "555" Екцханге код.

Овде можете видети и да користимо још један трик са двоструким цитатима.Двоструки цитати не дозвољавају вам само тумачење варијабли пре него што се стринг излази - такођер вам омогућавају да процесирају блокове скрипти.Да бисте то урадили, овако скратите блок скрипте: "$( & лт; #СЦРИПТ ХЕРЕ # & гт;)" .Дакле, оно што имате изнад је много појединачно рандомизованих цифара, а неки од њих су или ограничени у свом распону или статички постављени према правилима које требамо следити.Сваки стринг такође има заграде и размаке као што бисте обично очекивали да бисте видели у паралелном подручју и коду Екцханге кода.

Последња ствар коју треба да урадимо пре него што будемо спремни да изађемо наше име & амп;број телефона је да генерише претплатнички ИД, који ће бити сачуван као $ Суффик.

свитцх( $ НумберФормат){ {$ _ -лт 4}{ $ Суффик = "$( г 10) $( г 10) $( г 10) $( г 10)"} 4{ свитцх( $ Префик){ '($ 10) $( г 10) "}}}}

Због посебних правила за 555 бројева, не можемо самогенеришите четири случајне цифре за крај сваког броја телефона које ће наша скрипта направити.Дакле, први прекидач проверава да ли се бавимо бројем 555.Ако није, генерише се четири случајне цифре.Ако је број 555, други прекидач проверава код 800 подручја.Ако се то поклапа, постоји само један важећи $ Суффик који можемо користити.У супротном, дозвољено је да изаберете нешто између 0100-0199.

Имајте на уму да постоји неколико различитих начина на које је овај блок могао бити написан, умјесто како је.Оба прекидачка изјава могла су бити замијењена ако / елсе изјаве, пошто сваки од њих обављају само два избора.Такође, уместо да изричито изговара "4" као опцију за прву изводу преклопника, "подразумевана" се могла користити слично оном како је то учињено у другом, јер је то била једина опција која је остала.Избор између иф / елсе вс. свитцх-а или гдје користити уместо одређених вриједности подразумевану кључну ријеч, често се своди на питање личне преференције.Док год ради, користите све што вам највише одговара.

Сада је време за излаз.

Врите-Оутпут "$ ФирстНаме $ Презиме $ Префик- $ Суффик"}

Овај је прилично једноставан као што се добија у скрипти.Он само изводи име и презиме које су раздвојене размацима, а затим још један простор пре телефонског броја.Овде се додају и стандардна црта између Екцханге Цоде и Субсцрибер ИД.

Затворена конзола на дну је крај петље ФорЕацх-Објецт из ранијег - оставите ово ако већ имате.

Део 5: Чишћење и покретање скрипте

После свега рада, добра скрипта зна како се очисти после себе.Опет, уклањање варијабли испод није стварно потребно ако само покрећете скрипту са конзоле, али ћете га желети ако икада планирате да га покренете у ИСЕ-у.

Алиас Ремове-Итем: \ г Ремове-Вариабле СцриптФолдер, РекуиредФилес, Презиме, Мушко, ФирстНаме, НумберФормат, Префик, Суффик, ВалидИнпут, УсерИнпут

Након што сте све завршили, сачувајте скрипту са ".пс1" екстензијому истој фасцикли као и ваша имена.Уверите се да је ЕкецутионПолици подешен тако да скрипта може да покрене и да му дају вртлог.

Ево скрипте скрипте у акцији:

Такође можете преузети ЗИП датотеку која садржи ову ПоверСхелл скрипту и текстуалне датотеке са списком имена, из доле наведене линије.

Случајно име & амп;Генератор телефона за ПоверСхелл