Како генерисати случајна имена и телефонске бројеве са ПоверСхелл-ом
Када вам је потребан сет података за тестирање или демонстрацију, а тај скуп треба да представља личне информације (ПИИ), обично не желите да користите праве податке који представљају стварне људе. Овде ћемо вас проучити како можете да користите ПоверСхелл да бисте направили листу насумичних имена и бројева телефона за такву прилику.
Шта вам је потребно
Пре него што почнете, постоје неки алати и информације које треба да имате:
ПоверСхелл
Ова скрипта је развијена користећи ПоверСхелл 4.0 и тестирана је на компатибилност са ПоверСхелл 2.0. ПоверСхелл 2.0 или новији је уграђен у Виндовс од Виндовса 7. Такође је доступан за Виндовс КСП и Виста као дио Виндовс Манагемент Фрамеворк (ВМФ). Неки додатни детаљи и везе за преузимање су испод.
- ПоверСхелл 2.0 долази са оперативним системом Виндовс 7. Корисници Виндовс КСП СП3 и Виста (СП1 или новији) могу преузети одговарајућу ВМФ верзију од Мицрософта у КБ968929. Не подржава КСП СП2 или ниже, или Виста без СП1.
- ПоверСхелл 4.0 долази са Виндовс 8.1. Корисници Виндовса СП1 могу да га надограде као део ВМФ ажурирања из Мицрософт Довнлоад Центер-а. Није доступан за КСП или Виста.
Имена
Потребно је да унесете неке листе имена у генератор случајних бројева. Велики извор за лот имена и информације о њиховој популарности (иако то неће бити коришћено за овај сценарио), је Биро за попис становништва Сједињених Држава. Листе које су доступне на линковима испод су веома велике, тако да их можете мало смањити ако планирате да генеришете много имена и бројева одједном. На нашем тестном систему, сваки пар имена / бројева трајао је око 1,5 секунди да би се генерисао коришћењем комплетних листа, али ваша километража ће варирати у зависности од ваших спецификација система.
- prezimena
- Мушка имена
- Фемале Фирст Намес
Без обзира на извор који користите, мораћете да генеришете три текстуалне датотеке које скрипта може да користи као базу за избор имена. Свака датотека треба да садржи само имена и само једно име по линији. Они морају бити сачувани у истој фасцикли као и ПоверСхелл скрипта.
Намес.ткт треба да садржи презимена из којих желите да изаберете скрипту. Пример:
Смитх Јохнсон Виллиамс Јонес Бровн
Малес.ткт треба да садржи мушка имена која желите да скрипта изабере. Пример:
Јамес Јохн Роберт Мицхаел
Фемалес.ткт треба да садржи женска имена која желите да скрипта изабере. Пример:
Марија Патриша Линда Барбара Елизабет
Правила за телефонске бројеве
Ако желите да будете сигурни да се ваши телефонски бројеви не подударају са стварним бројем телефона, најлакши начин је да користите добро познати “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 који је резервисан за употребу као фиктивни број.
Имајте на уму да су горе наведена правила подложна промјенама и могу се разликовати у зависности од надлежности. Требало би да урадите сопствено истраживање да бисте проверили тренутна правила која се примењују на локализацију за коју ћете генерисати телефонске бројеве.
Цоммон Цоммандс
Постоје неке прилично уобичајене команде које ће бити коришћене у овом скрипту, тако да би требало да добијете основну идеју о томе шта то значи пре него што уђемо у писање.
- ФорЕацх-Објецт узима низ или листу објеката и извршава наведену операцију на сваком од њих. Унутар блока скрипте ФорЕацх-Објецт, $ _ променљива се користи да означи тренутну ставку која се обрађује.
- ако друго Изјаве вам омогућавају да извршите операцију само ако су испуњени одређени услови и (опционо) одредите шта треба да се уради када тај услов није испуњен.
- прекидач Изјаве су као ако изјаве са више избора. Прекидач ће проверити објекат на неколико услова и покренути било које скриптне блокове који су специфицирани за услове које објект одговара. Такође можете, опционо, да наведете подразумевани блок који ће се покренути само ако се не подударају други услови. Прекидачки изрази такође користе променљиву $ _ да се односе на тренутну ставку која се обрађује.
- док Изјаве омогућују да стално понављате блок скрипте све док је задовољен одређени услов. Када се нешто деси што узрокује да увјет више не буде истинит када је блок скрипте завршен, петља излази.
- покушај да ухватиш Изјаве помажу у обради грешака. Ако нешто крене по злу са блоком скрипте специфицираним за покушај, покренут ће блок за улов.
- Гет-Цонтент ради оно што пише на лиму. Она добија садржај одређеног објекта - обично фајл. Ово се може користити за приказ садржаја текстуалне датотеке на конзоли или, као у овој скрипти, прослеђивање садржаја дуж цевовода који ће се користити са другим командама.
- Врите-Хост ставља ствари у конзолу. Ово се користи за представљање порука кориснику и није укључено у излаз скрипте ако се излаз преусмери.
- Врите-Оутпут заправо генерише излаз. Нормално, ово се баца на конзолу, али се такође могу преусмерити другим командама.
Постоје и друге команде у скрипти, али ћемо их објаснити док идемо.
Изградња скрипте
Сада је време да се руке упрљају.
Први део: Припрема за покрет
Ако желите да ваш скрипт почне да се покреће из чисте конзоле, ево прве линије коју желите у њој.
Цлеар-Хост
Сада када имамо чист екран, следећа ствар коју желимо је да проверимо скрипту како би се уверили да је све потребно. Да бисмо то урадили, морамо почети тако што ћемо му рећи гдје да гледамо и шта да тражимо.
$ СцриптФолдер = Сплит-Патх $ МиИнвоцатион.МиЦомманд.Дефинитион -Парент $ РекуиредФилес = ('Малес.ткт', 'Фемалес.ткт', 'Намес.ткт')
Прва линија је веома корисна за било коју скрипту. Он дефинише променљиву која показује на фолдер који садржи скрипту. Ово је неопходно ако вашој скрипти требају друге датотеке које се налазе у истом директоријуму као и самом себи (или познатој релативној стази из тог директоријума), јер ћете иначе наићи на грешке ако и када покушате да покренете скрипту док сте у другој радни директоријум.
Друга линија ствара низ имена датотека који су потребни за исправно покретање скрипте. Користићемо ово, заједно са променљивом $ СцриптФолдер, у следећем делу где ћемо проверити да ли су те датотеке присутне.
$ РекуиредФилес | ФорЕацх-Објецт иф (! (Тест-Патх "$ СцриптФолдер \ _")) Врите-Хост "$ _ нот фоунд." -ФорегроундЦолор Ред $ МиссингФилес ++
Овај блок скрипте шаље $ РекуиредФилес низ у блок ФорЕацх-Објецт. Унутар тог блока скрипте, иф изјава користи Тест-Патх да види да ли датотека коју тражимо је мјесто гдје припада. Тест-Патх је једноставна наредба која, када је задата путања датотеке, враћа основни истинити или лажни одговор да нам каже да ли пут показује на нешто што постоји. Ускличник је а не оператор, који преокреће одговор тест-путање пре него што га проследи на иф наредбу. Дакле, ако Тест-Патх враћа фалсе (то јест, датотека коју тражимо не постоји), она ће се претворити у труе тако да ће иф израз извршити свој блок скрипте.
Још једна ствар коју овде треба напоменути, која ће се често користити у овом скрипту, је употреба двоструких наводника уместо једноструких наводника. Када ставите нешто у једноструке наводнике, ПоверСхелл га третира као статички низ. Шта год да је у појединачним наводима, биће прослеђено тачно онако како јесте. Двоструки наводници кажу ПоверСхелл-у да преведе варијабле и неке друге посебне ставке унутар низа пре него што их проследи. Овде, двоструки цитати значе то уместо да се изводи Тест-Патх '$ СцриптФолдер \ т заправо ћемо радити нешто више Тест-Патх 'Ц: Скрипте \ т (под претпоставком да је ваш скрипт у Ц: Скрипти, а ФорЕацх-Објецт тренутно ради на 'Намес.ткт').
За сваку датотеку која није пронађена, Врите-Хост ће послати поруку о грешци црвеном бојом да би вам рекао који фајл недостаје. Затим увећава променљиву $ МиссингФилес која ће се користити у следећем комаду, до грешке и изаћи ако су недостајали неки фајлови.
иф ($ МиссингФилес) Врите-Хост "Не могу пронаћи $ МиссингФилес изворну датотеку (е). Прекида скрипту." -ФорегроундЦолор Ред Ремове-Вариабле СцриптФолдер, РекуиредФилес, МиссингФилес Екит
Ево још једног уредног трика који можете учинити са изјавама. Већина водича ћете видјети о томе да ли ће вам изјаве рећи да користите оператора да бисте проверили одговарајући услов. На примјер, овдје би могли користити ако ($ МиссингФилес -гт 0) да видите да ли је $ МиссингФилес већи од нуле. Међутим, ако већ користите команде које враћају боолеан вредност (као у претходном блоку где смо користили Тест-Патх) то није потребно. Исто тако можете и без њега у случајевима као што је овај, када само тестирате да видите да ли је број не-нула. Било који број који није нула (позитиван или негативан) третира се као истинит, док се нула (или, као што се може овде десити, непостојећа променљива) третира као лажна.
Ако $ МиссингФилес постоји, а није нула, Врите-Хост ће објавити поруку која вам каже колико датотека недостаје и да ће скрипт бити прекинут. Затим, Ремове-Вариабле ће очистити све варијабле које смо креирали и Екит ће затворити скрипту. На регуларној ПоверСхелл конзоли, Ремове-Вариабле није стварно потребна за ову одређену сврху, јер су варијабле које постављају скрипте обично одбачене када скрипта изађе. Међутим, ПоверСхелл ИСЕ се понаша мало другачије тако да можда желите задржати ово у ако планирате да покренете скрипту одатле.
Ако су све ствари у реду, скрипта ће се наставити. Још једна припрема за направити је псеудоним који ће нам бити јако драго касније.
Нев-Алиас г Гет-Рандом
Псеудоними се користе за креирање алтернативних имена за команде. Ово може бити корисно да нам помогне да се упознамо са новим интерфејсом (нпр .: ПоверСхелл има уграђене алиасе попут дир -> Гет-ЦхилдИтем и цат -> Гет-Цонтент) или да бисте дали кратке референце за уобичајене команде. Ево, правимо врло кратка референца за Гет-Рандом наредбу која ће се много касније користити.
Гет-Рандом углавном ради оно што његово име имплицира. Дајући низ (као листу имена) као инпут, он бира насумичну ставку из низа и исцртава је. Такође се може користити за генерисање случајних бројева. Оно што треба запамтити о Гет-Рандом-у и бројевима је да, као и многе друге рачунарске операције, почиње да броји од нуле. Дакле, уместо Гет-Рандом 10 што значи да је природније "дајте ми број од 1 до 10", то заиста значи "дајте ми број од 0 до 9." Можете бити прецизнији у одабиру броја, тако да се Гет-Рандом понаша више као што сте ви очекивати, али нам то неће бити потребно у овом сценарију.
Део 2: Добијање корисничког уноса и добијање посла
Док је скрипта која генерише само један насумични и телефонски број одлична, много је боље ако скрипта дозвољава кориснику да одреди колико имена и бројева жели да добије у једној групи. Нажалост, не можемо да верујемо корисницима да увек дају валидан унос. Дакле, ту је мало више од овога $ УсерИнпут = Реад-Хост.
вхиле (! $ ВалидИнпут) три [инт] $ УсерИнпут = Реад-Хост -Промпт 'Ставке које треба генерисати' $ ВалидИнпут = $ труе цатцх Врите-Хост 'Неисправан унос. Унесите само број. ' -ФорегроундЦолор Ред
Израз вхиле изнад проверава, и негира, вредност $ ВалидИнпут. Све док је $ ВалидИнпут лажна, или не постоји, задржаће се кроз свој блок скрипте.
Извештај три узима кориснички унос, преко Реад-Хост, и покушава да га конвертује у целобројну вредност. (То је [инт] пре Реад-Хост.) Ако је успешан, поставиће $ ВалидИнпут на труе тако да петља вхиле може да изађе. Ако није успешан, блок за улов објављује грешку и зато што $ ВалидИнпут није подешен, петља вхиле ће се вратити и поново упутити корисника.
Када корисник правилно унесе број као улаз, желимо да скрипта најави да ће почети да ради свој посао, а затим да то уради.
Врите-Хост "'нГенератинг $ УсерИнпут имена и телефонски бројеви. Молим вас будите стрпљиви." 1 ... $ УсерИнпут | ФорЕацх-Објецт
Не брините, нећемо вас оставити сами да откријете шифру генератора случајних имена и бројева. То је само коментар који вам показује где ће се следећи одељак (где се прави посао заврши) уклопити.
Линија Врите-Хост је прилично јасна. Она једноставно каже колико имена и телефонских бројева ће скрипта генерисати, и тражи од корисника да буде стрпљив док скрипта ради свој посао. Тхе'н на почетку и на крају низа је да убаците празан редак пре и после тог излаза, само да бисте добили визуелно раздвајање између улазне линије и листе имена и бројева. Будите свјесни да је то повратна квачица (АКА "озбиљан нагласак" - обично кључ изнад картице, лијево од 1), а не апостроф или појединачни цитат испред сваког н.
Следећи део показује другачији начин на који можете да користите петљу ФорЕацх-Објецт. Обично, када желите да се блок скрипта покрене одређени број пута, поставићете регуларни за петљу слично за ($ к = 1; $ к -ле $ УсерИнпут; $ к ++) . ФорЕацх-Објецт дозвољава нам да поједноставимо ово тако што ћемо му дати листу целих бројева и уместо да јој кажемо да заиста уради било шта са тим целим бројевима, ми само дајемо блок за статичну скрипту да се покрене док не понестане целих бројева за то.
Део 3: Генерисање насумичног имена
Генерисање имена је најједноставнији део остатка овог процеса. Састоји се само од три корака: одабира презимена, одабира спола и одабира имена. Сећаш се онога што смо направили за Гет-Рандом? Време је да то почнете да користите.
$ Варијанте = Гет-Цонтент "$ СцриптФолдер \ т г $ Мале = г 2 иф ($ Мале) $ ФирстНаме = Гет-Цонтент "$ СцриптФолдер Малес.ткт" | г елсе $ ФирстНаме = Гет-Цонтент "$ СцриптФолдер Фемалес.ткт" | г
Прва линија заузима нашу листу презимена, убацује је у насумични бирач и додељује изабрано име $ Презиме.
Друга линија бира полове наше особе. Запамтите како Гет-Рандом почиње да броји од нуле, и како је нула лажна и све остало је истина? Тако ми користимо Гет-Рандом 2 (или много краћи г 2 захваљујући нашем псеудониму - оба резултирају избором између нуле или једног) да одлучимо да ли је наша особа мушкарац или не. Изјава иф / елсе након тога насумице бира мушко или женско име.
Део 4: Генерисање случајног броја телефона
Ово је стварно забаван део. Раније смо вам показали како постоји неколико начина на које можете направити неважећи или фиктивни број телефона. Пошто не желимо да сви наши бројеви изгледају превише слично једни другима, ми ћемо сваки пут насумично одабрати неважећи формат броја. Насумично изабрани формати ће бити дефинисани њиховим кодом подручја и кодом за размену, који ће се заједно чувати као $ Префик.
$ НумберФормат = г 5 свитцх ($ НумберФормат) 0 $ Префик = "($ (г 2) $ (г 10) $ (г 10)) $ (г 10) $ (г 10) $ (г 10)" 1 $ Префик = "($ (г 10) 9 $ (г 10)) $ (г 10) $ (г 10) $ (г 10)" 2 $ Префик = "($ (г 10) $ (г 10) $ (г 10)) $ (г 2) $ (г 10) $ (г 10) " 3 $ Префикс =" ($ (г 10) $ (г 10) $ (г 10)) $ (г 10) 11 " 4 $ Префик =" ($ (г 10) $ (г 10) $ (г 10)) 555 "
Прва линија је једноставна генерација случајних бројева како би изабрали који ћемо формат пратити за број телефона. Затим, свитцх изјава узима тај случајни избор и генерира $ Префик у складу с тим. Сећате се оне листе неважећих типова телефона? Вредности $ НумберФормат 0-3 одговарају првим четири у тој листи. Вредност 4 може генерисати једну од последње две, пошто оба користе “555” Екцханге код.
Овде можете видети и да користимо други трик са двоструким наводницима. Дупли цитати не дозвољавају вам да интерпретирате променљиве пре него што стринг добије излаз - они вам такође дозвољавају да обрађујете блокове за скрипте. Да бисте то урадили, омотајте блок скрипте на следећи начин: „$ ()“. Дакле, оно што имате изнад је много појединачно рандомизираних цифара, а неке од њих су или ограничене у свом опсегу или статички постављене у складу са правилима која требамо слиједити. Сваки низ има и заграде и размаке као што бисте иначе очекивали да ћете видети у пару кода кода и кода за размену.
Последња ствар коју морамо да урадимо пре него што будемо спремни да прикажемо наше име и број телефона је да генеришемо ИД претплатника, који ће бити сачуван као $ Суффик.
свитцх ($ НумберФормат) $ _ -лт 4 $ Суффик = "$ (г 10) $ (г 10) $ (г 10) $ (г 10)" 4 свитцх ($ Префик) '( 800) 555 '$ Суффик =' 0199 ' дефаулт $ Суффик = "01 $ (г 10) $ (г 10)"
Због посебних правила за 555 бројеве, не можемо само генерисати четири насумичне цифре за крај сваког телефонског броја који ће наша скрипта направити. Дакле, први прекидач провјерава да ли имамо посла с бројем 555. Ако није, генерише четири насумичне цифре. Ако је број 555, други прекидач провјерава позивни број 800. Ако се то поклапа, постоји само један важећи $ Суффик који можемо користити. У супротном, дозвољено је да изаберете било шта између 0100-0199.
Имајте на уму да постоји неколико различитих начина на које је овај блок могао да буде написан, уместо начина на који је. Оба свитцх израза могла су бити замењена са иф / елсе изјавама, јер свака од њих обрађује само два избора. Такође, уместо да изричито назовете "4" као опцију за прву ставку прекидача, "дефаулт" је могао бити коришћен слично ономе како је то учињено у другом, пошто је то била једина преостала опција. Избор између иф / елсе вс свитцх, или где да се користи подразумевана кључна реч уместо специфичних вредности, често се своди на питање личних преференција. Све док ради, користите све што вам највише одговара.
Сада је време за излаз.
Врите-Оутпут "$ ФирстНаме $ Варијанте: $ Префик-$ Суфикс"
Ова је прилично једноставна као што се појављује у сценарију. Само излази име и презиме одвојено размацима, а затим други простор испред телефонског броја. Овде се додаје и стандардна црта између Екцханге кода и ИД-а претплатника.
Та закључна заграда на дну је крај петље ФорЕацх-Објецт од раније - изоставите ово ако је већ имате.
Дио 5: Чишћење и покретање скрипте
Након што је сав посао завршен, добар сценариј зна како да очисти себе. Опет, уклањање варијабле испод није стварно потребно ако само покрећете скрипту са конзоле, али ћете је пожељети ако планирате да је покренете у ИСЕ-у.
Алиас: Ремове-Вариабле СцриптФолдер, РекуиредФилес, Презиме, Мушки, Име, НумберФормат, Префикс, Суфикс, ВалидИнпут, УсерИнпут
Када све то завршите, сачувајте скрипту са ".пс1" екстензијом у истој фасцикли као и датотеке са именима. Уверите се да је ваш ЕкецутионПолици постављен тако да скрипт може да се покрене и да му се врти.
Ево снимка екрана скрипте у акцији:
Такође можете да преузмете ЗИП датотеку која садржи овај ПоверСхелл скрипт и текстуалне датотеке са именским листама, са линка испод.
Генератор случајних имена и телефонских бројева за ПоверСхелл