कैसे PowerShell के साथ यादृच्छिक नाम और फोन नंबर उत्पन्न करने के लिए
जब आपको परीक्षण या प्रदर्शन के लिए डेटा सेट की आवश्यकता होती है, और उस सेट को व्यक्तिगत रूप से पहचान योग्य सूचना (PII) का प्रतिनिधित्व करने की आवश्यकता होती है, तो आप आम तौर पर वास्तविक लोगों का प्रतिनिधित्व करने वाले वास्तविक डेटा का उपयोग नहीं करना चाहते हैं। यहाँ, हम आपको ऐसे अवसर के लिए यादृच्छिक नामों और फ़ोन नंबरों की सूची बनाने के लिए PowerShell का उपयोग कैसे कर सकते हैं, के माध्यम से चलेंगे.
जिसकी आपको जरूरत है
आरंभ करने से पहले, आपके पास कुछ उपकरण और जानकारी होनी चाहिए:
शक्ति कोशिका
यह स्क्रिप्ट PowerShell 4.0 का उपयोग करके विकसित की गई थी, और PowerShell 2.0 के साथ संगतता के लिए भी परीक्षण किया गया है। PowerShell 2.0 या बाद में विंडोज 7 से विंडोज के लिए अंतर्निहित किया गया है। यह विंडोज मैनेजमेंट फ्रेमवर्क (WMF) के हिस्से के रूप में विंडोज एक्सपी और विस्टा के लिए भी उपलब्ध है। कुछ और विवरण, और डाउनलोड के लिए लिंक नीचे हैं.
- PowerShell 2.0 विंडोज 7. विंडोज एक्सपी एसपी 3 और विस्टा (SP1 या बाद में) के साथ आता है उपयोगकर्ता KB968929 में Microsoft से उपयुक्त WMF संस्करण डाउनलोड कर सकते हैं। यह SP1 के बिना XP SP2 या नीचे या विस्टा पर समर्थित नहीं है.
- PowerShell 4.0 विंडोज 8.1 के साथ आता है। Windows 7 SP1 उपयोगकर्ता इसे Microsoft डाउनलोड केंद्र से WMF अद्यतन के भाग के रूप में अपग्रेड कर सकते हैं। यह एक्सपी या विस्टा के लिए उपलब्ध नहीं है.
नाम
आपको यादृच्छिक जनरेटर में खिलाने के लिए नामों की कुछ सूचियों की आवश्यकता होगी। एक महान स्रोत के लिए एक बहुत नाम, और उनकी लोकप्रियता के बारे में जानकारी (हालांकि इस स्क्रिप्ट के लिए इसका उपयोग नहीं किया जाएगा), संयुक्त राज्य अमेरिका की जनगणना ब्यूरो है। नीचे दी गई लिंक पर उपलब्ध सूचियाँ बहुत बड़ी हैं, इसलिए यदि आप एक ही बार में बहुत सारे नाम और संख्याएँ बनाने की योजना बना रहे हैं, तो आप उन्हें थोड़ा नीचे ट्रिम करना चाह सकते हैं। हमारे परीक्षण प्रणाली पर, प्रत्येक नाम / संख्या जोड़ी को पूरी सूचियों का उपयोग करने में उत्पन्न होने में लगभग 1.5 सेकंड का समय लगता है, लेकिन आपके लाभ आपके सिस्टम सिस्टम के आधार पर भिन्न होंगे.
- उपनाम
- पुरुष प्रथम नाम
- महिला प्रथम नाम
आपके द्वारा उपयोग किए जाने वाले स्रोत के बावजूद, आपको तीन पाठ फ़ाइलों को उत्पन्न करने की आवश्यकता होगी जिन्हें स्क्रिप्ट अपने नाम चयन के लिए पूल के रूप में उपयोग कर सकती है। प्रत्येक फ़ाइल में केवल नाम और प्रति पंक्ति केवल एक नाम होना चाहिए। ये आपके PowerShell स्क्रिप्ट के समान फ़ोल्डर में संग्रहीत किए जाने की आवश्यकता है.
Surnames.txt उन उपनामों को शामिल करना चाहिए जिन्हें आप स्क्रिप्ट से चुनना चाहते हैं। उदाहरण:
स्मिथ जॉनसन विलियम्स जोन्स ब्राउन
Males.txt उस पुरुष के पहले नाम होने चाहिए जिसमें आप स्क्रिप्ट का चयन करना चाहते हैं। उदाहरण:
जेम्स जॉन रॉबर्ट माइकल विलियम
Females.txt उस महिला का पहला नाम होना चाहिए जिसे आप स्क्रिप्ट से चुनना चाहते हैं। उदाहरण:
मैरी पैट्रीसिया लिंडा बारबरा एलिजाबेथ
फोन नंबरों के लिए नियम
यदि आप यह सुनिश्चित करना चाहते हैं कि आपके फोन नंबर किसी के असली फोन नंबर के साथ मेल नहीं खाते हैं, तो सबसे आसान तरीका है कि जाने-माने "555" एक्सचेंज कोड का उपयोग करें। लेकिन अगर आप बहुत सारे फोन नंबरों के साथ एक डेटा सेट दिखा रहे हैं, तो यह 555 बहुत नीरस वास्तविक तेजी से दिखने लगेगा। चीजों को अधिक रोचक बनाने के लिए, हम अन्य फोन नंबर उत्पन्न करेंगे जो उत्तर अमेरिकी नंबरिंग योजना (एनएएनपी) नियमों का उल्लंघन करते हैं। नीचे कुछ नमूना अमान्य फ़ोन नंबर दिए गए हैं, जो इस स्क्रिप्ट द्वारा उत्पन्न की जाने वाली प्रत्येक श्रेणी का प्रतिनिधित्व करेंगे:
- (157) 836-8167
यह संख्या अमान्य है क्योंकि एरिया कोड 1 या 0 से शुरू नहीं हो सकता है. - (२ ९ 31) 29३१-६१ .५
यह संख्या अमान्य है क्योंकि NANP दूसरे अंकों के रूप में 9 के साथ क्षेत्र कोड असाइन नहीं कर रहा है. - (678) 035-7598
यह संख्या अमान्य है क्योंकि एक्सचेंज कोड 1 या 0 से शुरू नहीं हो सकता है. - (752) 811-1375
यह संख्या अमान्य है क्योंकि एक्सचेंज कोड दो 1s के साथ समाप्त नहीं हो सकता है. - (२६५) ५५५-०१२5
यह संख्या अमान्य है क्योंकि एक्सचेंज कोड 555 है, तथा सब्सक्राइबर आईडी काल्पनिक संख्या के लिए आरक्षित सीमा के भीतर है. - (800) 555-0199
यह संख्या 555 एक्सचेंज कोड के साथ केवल 800 नंबर है जो एक काल्पनिक संख्या के रूप में उपयोग के लिए आरक्षित है.
ध्यान दें कि उपरोक्त नियम परिवर्तन के अधीन हैं और क्षेत्राधिकार से भिन्न हो सकते हैं। वर्तमान नियमों को सत्यापित करने के लिए आपको अपना स्वयं का शोध करना चाहिए जो उस स्थान पर लागू होते हैं जिसके लिए आप फ़ोन नंबर उत्पन्न कर रहे होंगे.
कॉमन कमांड्स
कुछ पूरी तरह से सामान्य आदेश हैं जो इस स्क्रिप्ट में उपयोग किए जाने वाले हैं, इसलिए आपको इस बात का एक मूल विचार प्राप्त करना चाहिए कि वास्तव में इसे लिखने से पहले हम इसका क्या अर्थ निकालते हैं।.
- Foreach-वस्तु वस्तुओं की एक सरणी या सूची लेता है, और उनमें से प्रत्येक पर निर्दिष्ट ऑपरेशन करता है। ForEach-Object स्क्रिप्ट ब्लॉक के भीतर, मौजूदा आइटम को संसाधित करने के लिए $ _ वैरिएबल का उपयोग किया जाता है.
- यदि नहीं तो कथन आपको केवल तभी एक ऑपरेशन करने की अनुमति देते हैं जब कुछ शर्तें पूरी होती हैं, और (वैकल्पिक रूप से) निर्दिष्ट करें कि क्या किया जाना चाहिए जब वह शर्त पूरी नहीं होती है.
- स्विच यदि कथन अधिक विकल्पों के साथ हों तो कथन ऐसे होते हैं। स्विच कई शर्तों के खिलाफ एक वस्तु की जांच करेगा, और जो वस्तु ब्लॉक मेल खाती है उन शर्तों के लिए स्क्रिप्ट ब्लॉक निर्दिष्ट किए गए हैं। आप वैकल्पिक रूप से, एक डिफ़ॉल्ट ब्लॉक भी निर्दिष्ट कर सकते हैं जो केवल तभी चलेगा जब कोई अन्य शर्तें मेल नहीं खाती हैं। संसाधित किए जा रहे वर्तमान आइटम को संदर्भित करने के लिए स्विच स्टेटमेंट $ _ चर का भी उपयोग करते हैं.
- जबकि बयान आपको एक स्क्रिप्ट ब्लॉक को लगातार दोहराने की अनुमति देते हैं जब तक कि एक निश्चित शर्त पूरी नहीं हो जाती। एक बार जब कुछ ऐसा होता है जो स्क्रिप्ट ब्लॉक समाप्त होने पर स्थिति को सच नहीं होने का कारण बनता है, तो लूप बाहर निकलता है.
- पकड़ने की कोशिश कथन त्रुटि से निपटने में मदद करते हैं। यदि स्क्रिप्ट ब्लॉक के लिए कुछ भी गलत है, तो कोशिश करें कि कैच ब्लॉक चलेगा.
- सामग्री लो टिन पर दिये गये निर्देशों का पालन करो। इसे एक निर्दिष्ट ऑब्जेक्ट की सामग्री मिलती है - आमतौर पर एक फ़ाइल। इसका उपयोग कंसोल में पाठ फ़ाइल की सामग्री को प्रदर्शित करने के लिए किया जा सकता है या इस स्क्रिप्ट में, अन्य कमांड के लिए उपयोग की जाने वाली पाइपलाइन के साथ सामग्री को पास करें।.
- राइट-होस्ट कंसोल में सामान डालता है। इसका उपयोग उपयोगकर्ता को संदेश प्रस्तुत करने के लिए किया जाता है, और यदि आउटपुट पुनर्निर्देशित हो जाता है तो यह स्क्रिप्ट के आउटपुट में शामिल नहीं होता है.
- राइट-आउटपुट वास्तव में उत्पादन उत्पन्न करता है। आम तौर पर, इसे कंसोल पर डंप किया जाता है लेकिन इसे अन्य कमांड द्वारा भी रीडायरेक्ट किया जा सकता है.
स्क्रिप्ट में अन्य कमांड हैं, लेकिन हम उन्हें समझाएंगे जैसे हम जाते हैं.
स्क्रिप्ट का निर्माण
अब हमारे हाथ गंदे होने का समय आ गया है.
भाग 1: तैयार हो जाओ करने के लिए
यदि आप अपनी स्क्रिप्ट को क्लीन कंसोल से चलाना शुरू करना पसंद करते हैं, तो यहां पहली पंक्ति जो आप चाहते हैं.
साफ-होस्ट
अब जब हमारे पास एक साफ स्क्रीन है, तो अगली चीज जो हम करना चाहते हैं वह है स्क्रिप्ट की जांच यह सुनिश्चित करने के लिए कि उसकी जरूरत की हर चीज है। ऐसा करने के लिए, हमें यह बताने की जरूरत है कि यह कहां देखना है, और क्या देखना है.
$ ScriptFolder = स्प्लिट-पाथ $ MyInvocation.MyCommand.Definition -Parent $ RequiredFiles = ('Males.txt', 'Females.txt', 'Surnames.txt')
किसी भी स्क्रिप्ट के लिए पहली पंक्ति बहुत उपयोगी है। यह एक चर को परिभाषित करता है जो स्क्रिप्ट वाले फ़ोल्डर को इंगित करता है। यह आवश्यक है अगर आपकी स्क्रिप्ट को अन्य फ़ाइलों की आवश्यकता होती है जो स्वयं (या उस निर्देशिका से एक ज्ञात रिश्तेदार पथ) के रूप में एक ही निर्देशिका में स्थित हैं, क्योंकि आप अन्यथा त्रुटियों का सामना करेंगे जब आप स्क्रिप्ट को चलाने के लिए और जब आप दूसरे में हों कार्यकारी डाइरेक्टरी.
दूसरी पंक्ति फ़ाइल नामों की एक सरणी बनाती है जो स्क्रिप्ट को ठीक से चलाने के लिए आवश्यक होती हैं। हम इसका उपयोग अगले स्क्रिप्ट में $ ScriptFolder वैरिएबल के साथ करेंगे, जहां हम यह सुनिश्चित करने के लिए जांच करेंगे कि वे फाइलें मौजूद हैं या नहीं.
$ आवश्यक | ForEach-Object if (((Test-Path "$ ScriptFolder \ $ _")) Write-Host "$ _ नहीं मिला।" -ForegroundColor लाल $ MissingFiles ++
स्क्रिप्ट का यह हिस्सा फॉरएच-ऑब्जेक्ट ब्लॉक में $ RequiredFiles सरणी भेजता है। उस स्क्रिप्ट ब्लॉक के भीतर, अगर स्टेटमेंट यह देखने के लिए टेस्ट-पाथ का उपयोग करता है कि हम जिस फ़ाइल की तलाश कर रहे हैं वह कहाँ है। टेस्ट-पाथ एक साधारण कमांड है, जब एक फ़ाइल पथ दिया जाता है, तो हमें यह बताने के लिए एक मूल सही या गलत प्रतिक्रिया देता है कि क्या पथ कुछ मौजूद है। इसमें विस्मयादिबोधक बिंदु एक है नहीं ऑपरेटर, जो इफ स्टेटमेंट को पास करने से पहले टेस्ट-पाथ की प्रतिक्रिया को उलट देता है। इसलिए यदि टेस्ट-पाथ झूठा हो जाता है (यानी, वह फ़ाइल जिसकी हम तलाश कर रहे हैं, वह मौजूद नहीं है), इसे सही में बदल दिया जाएगा ताकि यदि स्टेटमेंट इसके स्क्रिप्ट ब्लॉक को निष्पादित कर दे.
यहां एक और बात ध्यान देने योग्य है, जिसका उपयोग अक्सर इस स्क्रिप्ट में किया जाता है, वह है सिंगल-कोट्स के बजाय डबल-कोट्स का उपयोग। जब आप सिंगल-कोट्स में कुछ डालते हैं, तो PowerShell इसे स्टैटिक स्ट्रिंग के रूप में मानता है। सिंगल कोट्स में जो कुछ भी है वह बिल्कुल साथ-साथ पारित किया जाएगा। डबल-कोट्स PowerShell को चर के भीतर चर और कुछ अन्य विशेष वस्तुओं को अनुवाद करने से पहले बताता है। यहां, डबल-कोट्स का मतलब है कि दौड़ने के बजाय परीक्षण-पथ '$ ScriptFolder \ $ _' हम वास्तव में कुछ और पसंद करेंगे परीक्षण-पथ 'C: \ Scripts \ Surnames.txt' (मान लें कि आपकी स्क्रिप्ट C: \ Scripts में है, और ForEach-Object वर्तमान में 'Surnames.txt' पर काम कर रहा है).
नहीं मिली प्रत्येक फ़ाइल के लिए, लिखें-होस्ट आपको यह बताने के लिए लाल रंग में एक त्रुटि संदेश पोस्ट करेगा कि कौन सी फ़ाइल गायब है। तब यह $ MissingFiles वैरिएबल को बढ़ाता है जो अगले टुकड़े में उपयोग किया जाएगा, त्रुटि और छोड़ने के लिए अगर कोई फाइलें गायब थीं.
अगर ($ MissingFiles) Write-Host "को $ MissingFiles स्रोत फ़ाइल नहीं मिली। -ForegroundColor Red Remove-Variable ScriptFolder, RequiredFiles, MissingFiles से बाहर निकलें
यहां एक और साफ-सुथरी चाल है जो आप बयानों के साथ कर सकते हैं। अधिकांश मार्गदर्शिकाएँ आपको इस बारे में दिखेंगी कि क्या कथन आपको एक मिलान स्थिति की जाँच के लिए ऑपरेटर का उपयोग करने के लिए कहेंगे उदाहरण के लिए, यहां हम उपयोग कर सकते हैं अगर ($ MissingFiles -gt 0) यह देखने के लिए कि क्या $ MissingFiles शून्य से अधिक है या नहीं। हालाँकि, यदि आप पहले से ही आदेशों का उपयोग कर रहे हैं जो बूलियन मान लौटाते हैं (पिछले ब्लॉक में जहां हम टेस्ट-पाथ का उपयोग कर रहे थे) आवश्यक नहीं है। आप इस तरह के मामलों में भी इसके बिना कर सकते हैं, जब आप केवल यह देखने के लिए परीक्षण कर रहे हैं कि कोई संख्या गैर-शून्य है या नहीं। कोई भी गैर-शून्य संख्या (धनात्मक या ऋणात्मक) को सत्य माना जाता है, जबकि शून्य (या, जैसा कि यहाँ हो सकता है, एक गैर-मौजूद चर) को असत्य माना जाएगा.
यदि $ MissingFiles मौजूद है, और गैर-शून्य है, तो लिखो-होस्ट आपको एक संदेश पोस्ट करेगा जिसमें बताया गया है कि कितनी फाइलें गायब थीं और स्क्रिप्ट निरस्त हो जाएगी। फिर, Remove-Variable हमारे द्वारा बनाए गए सभी चरों को साफ कर देगा और Exit स्क्रिप्ट छोड़ देगा। नियमित PowerShell कंसोल में, Remove-Variable को वास्तव में इस विशेष उद्देश्य के लिए आवश्यक नहीं है क्योंकि स्क्रिप्ट द्वारा सेट किए गए चर सामान्य रूप से स्क्रिप्ट से बाहर निकलने पर छोड़ दिए जाते हैं। हालाँकि, PowerShell ISE कुछ अलग तरह से व्यवहार करता है इसलिए आप इसे रखना चाह सकते हैं यदि आप स्क्रिप्ट को वहां से चलाने की योजना बनाते हैं.
यदि सभी चीजें क्रम में हैं, तो स्क्रिप्ट जारी रहेगी। बनाने के लिए एक और तैयारी एक उपनाम है जिसे हम बाद में पाकर बहुत खुश होंगे.
न्यू-एलियास जी गेट-रैंडम
उपनाम का उपयोग आदेशों के लिए वैकल्पिक नाम बनाने के लिए किया जाता है। ये नए इंटरफ़ेस से परिचित होने में हमारी मदद करने के लिए उपयोगी हो सकते हैं (जैसे: PowerShell में अंतर्निहित उपनाम हैं dir -> Get-ChildItem तथा बिल्ली -> जाओ-सामग्री) या आमतौर पर उपयोग किए जाने वाले आदेशों के लिए शॉर्ट-हैंड संदर्भ बनाने के लिए। यहाँ, हम एक बना रहे हैं बहुत के लिए लघु-हाथ संदर्भ Get-रैंडम कमांड जो बहुत बाद में उपयोग होने वाली है.
गेट-रैंडम बहुत कुछ करता है इसका नाम क्या है। इनपुट के रूप में एक सरणी (नामों की सूची की तरह) को देखते हुए, यह सरणी से एक यादृच्छिक आइटम चुनता है और इसे बाहर थूकता है। इसका उपयोग यादृच्छिक संख्या उत्पन्न करने के लिए भी किया जा सकता है। गेट-रैंडम और संख्याओं के बारे में याद रखने वाली बात यह है कि कई अन्य कंप्यूटर ऑपरेशनों की तरह, यह शून्य से गिनती शुरू करता है। इसलिए इसके बजाय जाओ-रैंडम 10 अधिक प्राकृतिक अर्थ "मुझे 1 से 10 तक संख्या दें" इसका वास्तव में मतलब है "मुझे 0 से 9 तक की संख्या दें।" आप संख्या चयन के बारे में अधिक विशिष्ट हो सकते हैं, ताकि गेट-रैंडम आपके द्वारा स्वाभाविक रूप से अधिक व्यवहार करें उम्मीद है, लेकिन हमें इस स्क्रिप्ट में इसकी आवश्यकता नहीं होगी.
भाग 2: उपयोगकर्ता इनपुट प्राप्त करना और कार्य करना
जबकि एक स्क्रिप्ट जो केवल एक यादृच्छिक नाम और फोन नंबर उत्पन्न करती है, वह बहुत बेहतर है, यदि स्क्रिप्ट उपयोगकर्ता को यह निर्दिष्ट करने की अनुमति देती है कि वे एक बैच में कितने नाम और नंबर प्राप्त करना चाहते हैं। दुर्भाग्य से, हम वास्तव में उपयोगकर्ताओं को हमेशा वैध इनपुट देने के लिए भरोसा नहीं कर सकते। तो, यह सिर्फ की तुलना में एक छोटे से अधिक है $ UserInput = पढ़ें-होस्ट.
जबकि ($ ValidInput) try [int] $ UserInput = Read-Host -rompt ’आइटम id $ ValidInput = $ true उत्पन्न करने के लिए Write-Host’ अवैध इनपुट। केवल एक नंबर दर्ज करें। ' -ForegroundColor लाल
उपरोक्त कथन, $ ValidInput के मूल्य के लिए जाँच और उपेक्षा करता है। जब तक $ ValidInput झूठा है, या मौजूद नहीं है, तब तक यह अपने स्क्रिप्ट ब्लॉक के माध्यम से लूप करता रहेगा.
प्रयास विवरण उपयोगकर्ता इनपुट को रीड-होस्ट के माध्यम से लेता है, और इसे पूर्णांक मान में बदलने का प्रयास करता है। (वह है [Int] Read-Host से पहले।) यदि यह सफल है, तो यह $ ValidInput को सही पर सेट करेगा, ताकि लूप बाहर निकल सके। सफल नहीं होने पर, कैच ब्लॉक एक त्रुटि पोस्ट करता है और, क्योंकि $ ValidInput सेट नहीं हुआ, जबकि लूप चारों ओर वापस आएगा और उपयोगकर्ता को फिर से संकेत देगा.
एक बार जब उपयोगकर्ता ने इनपुट के रूप में एक नंबर ठीक से दिया है, तो हम चाहते हैं कि स्क्रिप्ट यह घोषणा करे कि यह वास्तव में अपना काम शुरू करने वाली है और फिर इसे करने के बारे में प्राप्त करें.
राइट-होस्ट "'$ उपयोगकर्ता नाम और फोन नंबर की पहचान करें। कृपया धैर्य रखें।" 1 "... $ उपयोगकर्ता नाम फॉरएच-ऑब्जेक्ट
चिंता न करें, हम यादृच्छिक नाम और नंबर जनरेटर कोड का पता लगाने के लिए आपको अपने दम पर छोड़ने नहीं जा रहे हैं। यह सिर्फ एक प्लेसहोल्डर टिप्पणी है जो आपको यह दिखाने के लिए कि अगला भाग (जहां वास्तविक काम हो जाता है) फिट होने वाला है.
राइट-होस्ट लाइन बहुत सीधी है। यह बस कहता है कि स्क्रिप्ट कितने नाम और फोन नंबर उत्पन्न करने वाली है, और उपयोगकर्ता को धैर्य रखने के लिए कहता है जबकि स्क्रिप्ट अपना काम करती है।'एन स्ट्रिंग के प्रारंभ और अंत में, आउटपुट से पहले और बाद में एक खाली लाइन सम्मिलित करना है, बस इसे इनपुट लाइन और नामों और संख्याओं की सूची के बीच कुछ दृश्य पृथक्करण देना है। ध्यान रखें कि यह एक बैक-टिक (AKA "गंभीर उच्चारण" है - आमतौर पर टैब के ऊपर की कुंजी, 1 के बाईं ओर) और प्रत्येक के सामने एक एपॉस्ट्रॉफ़ या एकल-उद्धरण नहीं। n.
अगला भाग एक अलग तरह से दिखाता है जिससे आप एक ForEach- ऑब्जेक्ट लूप का उपयोग कर सकते हैं। आमतौर पर, जब आप एक स्क्रिप्ट ब्लॉक को एक निश्चित संख्या में चलाना चाहते हैं, तो आप लूप के लिए एक नियमित सेट अप करेंगे के लिए ($ x = 1; $ x -le $ UserInput; $ x ++) . फॉरएच-ऑब्जेक्ट हमें इसे पूर्णांक की एक सूची खिलाकर सरल बनाता है, और यह बताने के बजाय कि वास्तव में उन पूर्णांकों के साथ कुछ भी करने के लिए, हम इसे केवल एक स्थिर स्क्रिप्ट ब्लॉक देते हैं जब तक कि यह पूर्णांक से बाहर नहीं निकलता है जब तक कि यह करने के लिए.
भाग 3: रैंडम नाम उत्पन्न करना
नाम का निर्माण इस प्रक्रिया के बाकी हिस्सों में से सबसे सरल बिट है। इसमें केवल तीन चरण होते हैं: एक उपनाम चुनना, एक लिंग चुनना और पहला नाम चुनना। याद रखें कि उर्फ हमने गेट-रैंडम थोड़ी देर के लिए बनाया था? समय का उपयोग करने के लिए डाल शुरू करने के लिए.
$ उपनाम = Get-Content "$ ScriptFolder \ Surnames.txt" | जी $ नर = जी २ अगर ($ पुरुष) $ फर्स्टनाम = सामग्री प्राप्त करें "$ ScriptFolder \ Males.txt" | g और $ FirstName = Get-Content "$ ScriptFolder \ Females.txt" | छ
पहली पंक्ति हमारे उपनामों की सूची लेती है, इसे रैंडम पिकर में फीड करती है, और चुने हुए नाम को $ Surname प्रदान करती है.
दूसरी पंक्ति हमारे व्यक्ति के लिंग को चुनती है। याद रखें कि कैसे गेट-रैंडम की गिनती शून्य से शुरू होती है, और कैसे शून्य झूठी है और बाकी सब सच है? हम इसका उपयोग कर रहे हैं जाओ-रैंडम 2 (या बहुत छोटा है जी २ हमारे उपनाम के लिए धन्यवाद - दोनों का परिणाम शून्य या एक के बीच एक विकल्प है) यह तय करने के लिए कि हमारा व्यक्ति पुरुष है या नहीं। अगर / अन्यथा कथन बाद में अनियमित रूप से एक पुरुष या महिला का पहला नाम चुनता है.
भाग 4: रैंडम फोन नंबर जनरेट करना
यहाँ वास्तव में मजेदार हिस्सा है। इससे पहले, हमने आपको दिखाया कि कैसे कई तरीके हैं जिनसे आप अमान्य या काल्पनिक फ़ोन नंबर बना सकते हैं। चूँकि हम नहीं चाहते कि हमारी सभी संख्याएँ एक-दूसरे के समान दिखें, इसलिए हम हर बार एक अमान्य संख्या प्रारूप को अनियमित रूप से चुनेंगे। यादृच्छिक रूप से चुने गए स्वरूपों को उनके एरिया कोड और एक्सचेंज कोड द्वारा परिभाषित किया जाएगा, जिसे सामूहिक रूप से $ Prefix के रूप में संग्रहीत किया जाएगा.
$ NumberFormat = g 5 स्विच ($ NumberFormat) 0 $ Prefix = "($ (g 2) $ (g 10) $ (g 10)) $ (g 10) $ (g 10) $ (g 10)" 1 $ उपसर्ग = "($ (जी 10) 9 $ (जी 10)) $ (जी 10) $ (जी 10) $ (जी 10)" 2 $ $ उपसर्ग = "($ जी 10) $ (g 10) $ (g 10)) $ (g 2) $ (g 10) $ (g 10) " 3 $ उपसर्ग =" ($ (g 10) $ (g 10) $ (g 10)) $ (g 10) 11 " 4 $ उपसर्ग =" ($ (g 10) $ (g 10) $ (g 10)) 555 ")
पहली पंक्ति एक सीधी यादृच्छिक रैंडम पीढ़ी है जिसे लेने के लिए हम फ़ोन नंबर के लिए किस प्रारूप का अनुसरण करने जा रहे हैं। फिर, स्विच स्टेटमेंट उस यादृच्छिक विकल्प को लेता है और उसके अनुसार $ प्रीफिक्स उत्पन्न करता है। अमान्य फ़ोन नंबर प्रकारों की वह सूची याद रखें? $ NumberFormat मान 0-3 उस सूची में पहले चार के अनुरूप है। मान 4 अंतिम दो में से एक उत्पन्न कर सकता है, क्योंकि दोनों "555" एक्सचेंज कोड का उपयोग करते हैं.
यहाँ, आप यह भी देख सकते हैं कि हम दोहरे कोट्स के साथ एक और ट्रिक का उपयोग कर रहे हैं। डबल-कोट्स एक स्ट्रिंग आउटपुट होने से पहले आपको केवल चर की व्याख्या नहीं करने देते हैं - वे आपको स्क्रिप्ट ब्लॉक की प्रक्रिया करने देते हैं। ऐसा करने के लिए, आप स्क्रिप्ट ब्लॉक को इस तरह से लपेटते हैं: "$ ()". तो आपके पास जो कुछ है, वह व्यक्तिगत रूप से यादृच्छिक अंकों का एक बहुत है, उनमें से कुछ या तो उनकी सीमा में सीमित हैं या उन नियमों के अनुसार निर्धारित हैं जिनका हमें पालन करने की आवश्यकता है। प्रत्येक स्ट्रिंग में कोष्ठक और रिक्ति होती है जैसा कि आप आमतौर पर एक एरिया कोड और एक्सचेंज कोड जोड़ी में देखने की उम्मीद करते हैं.
आखिरी चीज जो हमें अपना नाम और फोन नंबर तैयार करने से पहले करनी होगी, वह सब्सक्राइबर आईडी जनरेट करना है, जिसे $ Suffix के रूप में संग्रहीत किया जाएगा।.
स्विच ($ NumberFormat) $ _ -lt 4 $ प्रत्यय = "$ (g 10) $ (g 10) $ (g 10) $ (g 10)" 4 स्विच ($ उपसर्ग) '( 800) 555 '$ प्रत्यय =' 0199 ' डिफ़ॉल्ट $ प्रत्यय = "01 $ (जी 10) $ (जी 10)"
555 नंबरों के विशेष नियमों के कारण, हम अपनी स्क्रिप्ट बनाने जा रहे हर फोन नंबर के अंत के लिए चार यादृच्छिक अंक नहीं बना सकते हैं। इसलिए, पहला स्विच यह देखने के लिए जांचता है कि क्या हम 555 नंबर के साथ काम कर रहे हैं। यदि नहीं, तो यह चार यादृच्छिक अंक उत्पन्न करता है। यदि यह 555 नंबर है, तो दूसरा स्विच 800 एरिया कोड के लिए चेक करता है। यदि वह मेल खाता है, तो केवल एक ही वैध $ Suffix है जिसका हम उपयोग कर सकते हैं। अन्यथा, इसे 0100-0199 के बीच कुछ भी लेने की अनुमति है.
ध्यान दें कि कुछ अलग तरीके हैं जो इस ब्लॉक को लिखा जा सकता है, इसके बजाय जिस तरह से यह है। दोनों स्विच स्टेटमेंट को अगर / अन्यथा स्टेटमेंट्स से बदला जा सकता है, क्योंकि वे प्रत्येक केवल दो विकल्पों को संभालते हैं। इसके अलावा, विशेष रूप से पहले स्विच स्टेटमेंट के विकल्प के रूप में "4" को कॉल करने के बजाय, "डिफ़ॉल्ट" का उपयोग उसी तरह किया जा सकता था, जैसा कि दूसरे में किया गया था क्योंकि यह एकमात्र विकल्प बचा था। विशिष्ट मानों के बजाय डिफ़ॉल्ट बनाम कीवर्ड का उपयोग करने के लिए / जहां स्विच करें, या जहां के बीच विकल्प, अक्सर व्यक्तिगत प्राथमिकता के मामले में नीचे आता है। तो जब तक यह काम करता है, तब तक जो भी आपके लिए सबसे अधिक आरामदायक हो, उसका उपयोग करें.
अब, यह आउटपुट का समय है.
लिखो-आउटपुट "$ FirstName $ उपनाम $ उपसर्ग- $ प्रत्यय"
यह बहुत आसान है जितना स्क्रिप्ट में मिलता है। यह केवल पहले और अंतिम नाम को स्पेस से अलग करता है, फिर फोन नंबर से पहले एक और स्पेस। यहां एक्सचेंज कोड और सब्सक्राइबर आईडी के बीच मानक डैश को भी जोड़ा गया है.
नीचे की ओर कोष्ठक को बंद करना पहले से ForEach-Object लूप का अंत है - यदि आपने इसे पहले ही प्राप्त कर लिया है तो इसे छोड़ दें.
भाग 5: स्क्रिप्ट को क्लीनअप और रन करना
सभी काम पूरा होने के बाद, एक अच्छी स्क्रिप्ट जानती है कि अपने आप को कैसे साफ करना है। फिर, नीचे दिए गए चर को हटाने की वास्तव में आवश्यकता नहीं है यदि आप केवल स्क्रिप्ट को कंसोल से चलाने जा रहे हैं, लेकिन यदि आप कभी भी इसे आईएसई में चलाने की योजना बना रहे हैं तो आप इसे चाहेंगे।.
निकालें-आइटम उपनाम: \ g निकालें-परिवर्तनीय ScriptFolder, RequiredFiles, उपनाम, पुरुष, FirstName, NumberFormat, उपसर्ग, प्रत्यय, ValidInput, UserInput
आपके द्वारा यह सब पूरा करने के बाद, अपने नाम की फ़ाइलों के समान स्क्रिप्ट में ".ps1" एक्सटेंशन के साथ स्क्रिप्ट को सहेजें। सुनिश्चित करें कि आपका ExecutionPolicy सेट है ताकि स्क्रिप्ट चल सके, और इसे एक चक्कर दे.
यहाँ स्क्रिप्ट का एक स्क्रीनशॉट कार्रवाई में है:
आप नीचे दिए गए लिंक से इस PowerShell स्क्रिप्ट और नाम सूचियों के साथ पाठ फ़ाइलों वाली ज़िप फ़ाइल भी डाउनलोड कर सकते हैं.
PowerShell के लिए रैंडम नाम और फोन नंबर जेनरेटर