الصفحة الرئيسية » howto » كيفية توليد أسماء عشوائية وأرقام الهاتف مع PowerShell

    كيفية توليد أسماء عشوائية وأرقام الهاتف مع PowerShell

    عندما تحتاج إلى مجموعة بيانات للاختبار أو العرض التوضيحي ، وتحتاج هذه المجموعة لتمثيل معلومات التعريف الشخصية (PII) ، فإنك لا ترغب في استخدام البيانات الحقيقية التي تمثل الأشخاص الفعليين. هنا ، سنرشدك إلى كيفية استخدام PowerShell لإنشاء قائمة بأسماء وأرقام هواتف عشوائية لمثل هذه المناسبة فقط.

    ماذا تحتاج

    قبل البدء ، هناك بعض الأدوات والمعلومات التي يجب أن تكون لديك:

    بوويرشيل

    تم تطوير هذا البرنامج النصي باستخدام PowerShell 4.0 ، وتم اختباره أيضًا من أجل التوافق مع PowerShell 2.0. تمت إضافة PowerShell 2.0 أو أحدث إلى Windows منذ Windows 7. وهو متوفر أيضًا لنظامي التشغيل Windows XP و Vista كجزء من Windows Framework Framework (WMF). فيما يلي بعض التفاصيل الإضافية والروابط الخاصة بالتنزيلات.

    • يأتي الإصدار PowerShell 2.0 مزوداً بنظام التشغيل Windows 7. يمكن لمستخدمي Windows XP SP3 و Vista (SP1 أو أحدث) تنزيل إصدار WMF المناسب من Microsoft في KB968929. غير معتمد على XP SP2 أو أدناه أو Vista دون SP1.
    • يأتي الإصدار 4.0 من برنامج PowerShell مزودًا بنظام التشغيل Windows 8.1. يمكن لمستخدمي Windows 7 SP1 الترقية إليه كجزء من تحديث WMF من "مركز التنزيل لـ Microsoft". لا يتوفر لنظام التشغيل XP أو Vista.

    أسماء

    ستحتاج إلى بعض قوائم الأسماء لإدخالها في المولد العشوائي. مصدر كبير ل قطعة أرض من الأسماء ، والمعلومات المتعلقة بشعبيتها (على الرغم من أن هذا لن يستخدم لهذا البرنامج النصي) ، هو مكتب الإحصاء في الولايات المتحدة. القوائم المتوفرة على الروابط أدناه كبيرة جدًا ، لذا قد ترغب في تقليصها قليلاً إذا كنت تخطط لإنشاء الكثير من الأسماء والأرقام في وقت واحد. في نظامنا التجريبي ، استغرق كل زوج من الأسماء / الأرقام 1.5 ثانية تقريبًا لتوليدها باستخدام القوائم الكاملة ، ولكن عدد الأميال الخاص بك سيختلف اعتمادًا على مواصفات النظام الخاصة بك.

    • الألقاب
    • ذكر الأسماء الأولى
    • الأسماء الأولى للإناث

    بغض النظر عن المصدر الذي تستخدمه ، ستحتاج إلى إنشاء ثلاثة ملفات نصية يمكن أن يستخدمها البرنامج النصي كتجمعات لتحديد اسمه. يجب أن يحتوي كل ملف على أسماء فقط واسم واحد فقط في كل سطر. تحتاج هذه إلى تخزينها في نفس المجلد مثل البرنامج النصي PowerShell.

    Surnames.txt يجب أن تحتوي على الألقاب التي تريد أن يقوم البرنامج النصي بتحديدها. مثال:

    سميث جونسون وليامز جونز براون

    Males.txt يجب أن يحتوي على الأسماء الأولى الذكور التي تريد أن يقوم البرنامج النصي بتحديدها. مثال:

    جيمس جون روبرت مايكل ويليام

    Females.txt يجب أن يحتوي على الأسماء الأولى للأنثى التي تريد أن يقوم البرنامج النصي باختيارها منها. مثال:

    ماري باتريشيا ليندا باربرا إليزابيث

    قواعد لأرقام الهاتف

    إذا كنت تريد التأكد من عدم تطابق أرقام هاتفك مع رقم الهاتف الحقيقي لأي شخص ، فإن أسهل طريقة هي استخدام رمز Exchange "555" المعروف. ولكن إذا كنت ستعرض مجموعة بيانات تحتوي على الكثير من أرقام الهواتف ، فإن 555 ستبدأ في الظهور بسرعة حقيقية. لجعل الأشياء أكثر إثارة للاهتمام ، سنقوم بإنشاء أرقام هواتف أخرى تنتهك قواعد خطة الترقيم في أمريكا الشمالية (NANP). في ما يلي بعض أرقام الهواتف غير الصحيحة ، والتي تمثل كل فئة من الأرقام التي سيتم إنشاؤها بواسطة هذا البرنامج النصي:

    • (157) 836-8167
      هذا الرقم غير صالح لأن رموز المناطق لا يمكن أن تبدأ بـ 1 أو 0.
    • (298) 731-6185
      هذا الرقم غير صالح لأن NANP لا يعين رموز المنطقة بـ 9 كرقم ثاني.
    • (678) 035-7598
      هذا الرقم غير صالح لأنه لا يمكن بدء رموز Exchange بـ 1 أو 0.
    • (752) 811-1375
      هذا الرقم غير صالح لأن رموز Exchange لا يمكن أن تنتهي بـ 1s.
    • (265) 555-0128
      هذا الرقم غير صالح لأن رمز Exchange هو 555, و رقم المشترك هو ضمن النطاق المحجوز للأرقام الوهمية.
    • (800) 555-0199
      هذا الرقم هو الرقم 800 فقط مع رمز صرف 555 الذي تم حجزه للاستخدام كرقم وهمي.

    لاحظ أن القواعد المذكورة أعلاه عرضة للتغيير وقد تختلف حسب الاختصاص. يجب عليك إجراء البحث الخاص بك للتحقق من القواعد الحالية التي تنطبق على اللغة التي ستقوم بتوليد أرقام الهواتف.

    الأوامر المشتركة

    هناك بعض الأوامر الشائعة إلى حدٍ ما والتي سيتم استخدامها خلال هذا النص البرمجي ، لذا يجب أن تحصل على فكرة أساسية عما تعنيه هذه الكلمات قبل أن نبدأ في كتابتها فعليًا.

    • ForEach-كائن يأخذ صفيف ، أو قائمة ، من الكائنات وينفذ العملية المحددة على كل واحد منهم. ضمن كتلة البرنامج النصي ForEach-Object ، يتم استخدام المتغير $ _ للإشارة إلى العنصر الجاري معالجته.
    • لو غير هذا تسمح لك البيانات بإجراء عملية فقط في حالة استيفاء شروط معينة ، و (اختيارياً) تحديد ما يجب القيام به عند عدم استيفاء هذا الشرط.
    • مفتاح كهربائي البيانات مثل لو البيانات مع المزيد من الخيارات. سيقوم المفتاح بالتحقق من كائن مقابل عدة شروط وتشغيل أي كتل البرامج النصية المحددة للحالات التي يطابقها الكائن. يمكنك أيضًا ، اختيارياً ، تحديد كتلة افتراضية سيتم تشغيلها فقط في حالة عدم مطابقة أي شروط أخرى. تستخدم عبارات التبديل أيضًا المتغير $ _ للإشارة إلى العنصر الحالي الذي تتم معالجته.
    • في حين تسمح لك العبارات باستمرار تكرار كتلة البرنامج النصي طالما تم استيفاء شرط معين. بمجرد حدوث شيء ما يتسبب في أن الشرط لم يعد صحيحًا عند انتهاء كتلة البرنامج النصي ، يتم إنهاء الحلقة.
    • حاول ... الصيد تساعد العبارات مع معالجة الأخطاء. إذا حدث أي خطأ في كتلة البرنامج النصي المحددة للمحاولة ، فسيتم تشغيل كتلة catch.
    • الحصول على المحتوى ما المكتوب على العلبة. فإنه يحصل على محتويات كائن محدد - عادة ما يكون ملف. يمكن استخدام هذا لعرض محتويات ملف نصي في وحدة التحكم أو ، كما هو الحال في هذا البرنامج النصي ، تمرير المحتويات على طول خط الأنابيب لاستخدامه مع الأوامر الأخرى.
    • الكتابة المضيف يضع الأشياء في وحدة التحكم. يستخدم هذا لتقديم الرسائل إلى المستخدم ، ولا يتم تضمينه في إخراج البرنامج النصي إذا تمت إعادة توجيه الإخراج.
    • الكتابة والمخرجات في الواقع يولد الإخراج. عادةً ، يتم إلقاء هذا على وحدة التحكم ولكن يمكن أيضاً إعادة توجيهها بواسطة أوامر أخرى.

    هناك أوامر أخرى في النص البرمجي ، لكننا سنشرح تلك الأوامر كما نذهب.

    بناء البرنامج النصي

    الآن حان الوقت للحصول على أيدينا القذرة.

    الجزء 1: الاستعداد للذهاب

    إذا كنت ترغب في بدء تشغيل البرنامج النصي من وحدة تحكم نظيفة ، فإليك السطر الأول الذي تريده.

    واضح المضيف

    الآن بعد أن أصبح لدينا شاشة نظيفة ، فإن الشيء التالي الذي نريد القيام به هو فحص النص للتأكد من أن كل ما يحتاجه هو في مكانه. للقيام بذلك ، نحتاج أن نبدأ بإخباره أين يجب أن ننظر ، وما الذي تبحث عنه.

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

    السطر الأول هناك مفيد للغاية لأي برنامج نصي. يحدد المتغير الذي يشير إلى المجلد الذي يحتوي على البرنامج النصي. هذا ضروري إذا كان البرنامج النصي الخاص بك يحتاج إلى ملفات أخرى موجودة في نفس الدليل نفسه (أو مسار نسبي معروف من ذلك الدليل) ، لأنك ستواجه أخطاء أخرى إذا حاولت تشغيل البرنامج النصي عندما تكون في آخر عمل اخراجي.

    ينشئ السطر الثاني صفيف أسماء الملفات المطلوبة لتشغيل البرنامج النصي بشكل صحيح. سنستخدم هذا ، مع متغير $ ScriptFolder ، في الجزء التالي حيث نتحقق من وجود هذه الملفات.

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

    يرسل هذا جزء من البرنامج النصي الصفيف RequiredFiles $ إلى كتلة ForEach-Object. ضمن كتلة البرنامج النصي هذه ، تستخدم عبارة if مسار اختبار لمعرفة ما إذا كان الملف الذي نبحث عنه هو المكان الذي ينتمي إليه. اختبار المسار هو أمر بسيط ، عندما يعطى مسار ملف ، يقوم بإرجاع استجابة حقيقية أو خاطئة أساسية لإخبارنا إذا كان المسار يشير إلى شيء موجود. علامة التعجب هناك ليس المشغل ، الذي يعكس استجابة مسار الاختبار قبل تمريره إلى بيان if. لذا ، إذا كان Test-Path يرجع خطأ (أي أن الملف الذي نبحث عنه غير موجود) ، فسيتم تحويله إلى true حتى يتم تنفيذ جملة if في النص البرمجي.

    هناك أمر آخر يجب ملاحظته هنا ، والذي سيتم استخدامه غالبًا في هذا النص ، وهو استخدام علامات اقتباس مزدوجة بدلاً من علامات الاقتباس المفردة. عندما تضع شيئًا ما في علامات اقتباس مفردة ، فإن PowerShell يعامله كسلسلة ثابتة. سيتم تمرير أي شيء في علامات الاقتباس الفردية على النحو نفسه كما هو. تشير علامات الاقتباس المزدوجة إلى PowerShell لترجمة المتغيرات وبعض العناصر الخاصة الأخرى داخل السلسلة قبل تمريرها. هنا ، فإن علامات الاقتباس المزدوجة تعني أنه بدلاً من الركض مسار الاختبار '$ ScriptFolder \ $ _'  سنقوم بالفعل بشيء أشبه مسار الاختبار "C: \ Scripts \ Surnames.txt" (بافتراض أن النص البرمجي موجود في C: \ Scripts ، ويعمل ForEach-Object حاليًا على 'Surnames.txt').

    لكل ملف غير موجود ، سيقوم Write-Host بنشر رسالة خطأ باللون الأحمر لإعلامك بالملف المفقود. ثم يقوم بزيادة قيمة المتغير MissingFiles $ الذي سيتم استخدامه في الجزء التالي ، إلى الخطأ والإيقاف إذا كان هناك أي ملفات مفقودة.

    if ($ MissingFiles) Write-Host "تعذر العثور على الملف (الملفات) الملف $ MissingFiles. إحباط البرنامج النصي." -ForegroundColor Red-Variable ScriptFolder، RequiredFiles، MissingFiles Exit

    هنا خدعة أخرى أنيقة يمكنك القيام بها إذا كانت البيانات. سترى معظم الأدلة حول ما إذا كانت العبارات ستخبرك باستخدام عامل للتحقق من وجود حالة مطابقة. على سبيل المثال ، هنا يمكن أن نستخدمها إذا ($ MissingFiles -gt 0) لمعرفة ما إذا كان $ MissingFiles أكبر من الصفر. ومع ذلك ، إذا كنت تستخدم بالفعل أوامر تُرجع قيمة منطقية (كما هو الحال في الفدرة السابقة حيث كنا نستخدم Test-Path) ، فهذا ليس ضروريًا. يمكنك أيضًا الاستغناء عنها في حالات مثل هذه ، عندما تختبر فقط لمعرفة ما إذا كان الرقم غير صفري. يتم التعامل مع أي رقم غير صفري (موجب أو سلبي) على أنه صحيح ، في حين أن الصفر (أو ، كما قد يحدث هنا ، متغير غير موجود) سيعامل على أنه خطأ.

    إذا كان $ MissingFiles موجودًا ، وهو غير صفري ، فسيقوم Write-Host بنشر رسالة تخبرك عن عدد الملفات المفقودة ومن أن البرنامج النصي سوف يتم إيقافه. بعد ذلك ، سيزيل برنامج Remove-Variable جميع المتغيرات التي أنشأناها وسيؤدي الخروج إلى إنهاء البرنامج النصي. في وحدة تحكم PowerShell العادية ، لا يحتاج "إزالة المتغير" بالفعل لهذا الغرض الخاص لأنه يتم تجاهل المتغيرات التي تم تعيينها بواسطة البرامج النصية عادة عند إنهاء البرنامج النصي. ومع ذلك ، فإن PowerShell ISE يتصرف بطريقة مختلفة قليلاً لذا قد ترغب في الاحتفاظ بهذا إذا كنت تخطط لتشغيل البرنامج النصي من هناك.

    إذا كانت كل الأشياء بالترتيب ، سيستمر النص البرمجي. واحد آخر لإعداد لجعل هو الاسم المستعار الذي سنكون سعداء حقا أن يكون في وقت لاحق.

    الاسم المستعار الجديد g-get عشوائي

    يتم استخدام الأسماء المستعارة لإنشاء أسماء بديلة للأوامر. قد يكون ذلك مفيدًا لمساعدتنا في التعرف على الواجهة الجديدة (على سبيل المثال: يحتوي PowerShell على أسماء مستعارة مضمنة مثل dir -> Get-ChildItem و قطة -> الحصول على المحتوى) أو إنشاء مراجع قصيرة للأوامر شائعة الاستخدام. هنا ، نحن نصنع للغاية مرجع قصير ل الحصول على لعشوائية الأمر الذي سيتم استخدامه كثيرًا في وقت لاحق.

    الحصول على العشوائية إلى حد كبير يفعل ما يدل على اسمها. بالنظر إلى مصفوفة (مثل قائمة الأسماء) كمدخل ، فإنه يختار عنصرًا عشوائيًا من الصفيف ويبصقه. ويمكن أيضا أن تستخدم لتوليد أرقام عشوائية. الشيء الذي يجب تذكره حول Get-Random والأرقام هو أنه ، مثل العديد من عمليات الكمبيوتر الأخرى ، يبدأ العد من الصفر. لذا بدلا من الحصول على عشوائي 10 بمعنى أنه أكثر طبيعية "أعطني رقمًا من 1 إلى 10" فهذا يعني حقًا "أعطني رقمًا من 0 إلى 9." يمكنك أن تكون أكثر تحديدًا حول اختيار الرقم ، بحيث يتصرف سلوك عشوائي أكثر مثلما تفعل بشكل طبيعي نتوقع ، لكننا لن نحتاج ذلك في هذا النص.

    الجزء 2: الحصول على مدخلات المستخدم والوصول إلى العمل

    على الرغم من أن النص البرمجي الذي ينشئ اسمًا ورقمًا عشوائيًا واحدًا رائعًا ، إلا أنه أفضل بكثير إذا سمح البرنامج النصي للمستخدم بتحديد عدد الأسماء والأرقام التي يريد الحصول عليها في دفعة واحدة. لسوء الحظ ، لا يمكننا أن نثق في أن المستخدمين يقدمون دائمًا إدخالات صالحة. لذلك ، هناك أكثر من ذلك بقليل من مجرد $ UserInput = Read-Host.

    بينما (! $ ValidInput) try [int] $ UserInput = Read-Host -Prompt 'العناصر المراد إنشاؤها' $ ValidInput = $ true التقط Write-Host 'Invalid input. أدخل رقم فقط. -ForegroundColor Red

    يتحقق البيان "while" أعلاه من قيمة $ ValidInput ، وينفيها. طالما أن قيمة ValidInput $ خاطئة ، أو غير موجودة ، فإنها ستستمر في التكرار خلال كتلة البرنامج النصي الخاص بها.

    يأخذ بيان المحاولة إدخال المستخدم ، عبر Read-Host ، ويحاول تحويله إلى قيمة عددية. (هذا هو [الباحث] قبل Read-Host.) إذا كان ناجحاً ، فإنه سيتم تعيين $ ValidInput إلى true بحيث يمكن إنهاء حلقة while. إذا لم تنجح ، فستقوم كتلة catch باكتشاف خطأ ، ولأن $ ValidInput لم يتم ضبطها ، ستعود الحلقة أثناءها وتطالب المستخدم مرة أخرى.

    بمجرد أن يقوم المستخدم بإعطاء رقم صحيح كمدخل ، فإننا نريد أن يعلن البرنامج النصي أنه على وشك البدء في إنجاز عمله فعليًا ثم تحقيقه.

    كتابة مضيف "'nGenerating $ UserInput أسماء وأرقام هواتف. الرجاء التحلي بالصبر." "1 ... $ UserInput | ForEach-Object 

    لا تقلق ، لن نتركك بمفردك لمعرفة رمز اسم ورقم عشوائي للعنصر. هذا مجرد تعليق نائب لتوضيح مكان تواجد القسم التالي (حيث يتم إنجاز العمل الحقيقي).

    خط الكتابة-المضيف بسيط جدا. إنه ببساطة يوضح عدد الأسماء وأرقام الهواتف التي سينشئها البرنامج النصي ، ويطلب من المستخدم التحلي بالصبر بينما يقوم البرنامج النصي بعمله. ال'ن في بداية ونهاية السلسلة هو إدخال سطر فارغ قبل وبعد ذلك الإخراج ، فقط لإعطائه بعض الفصل المرئي بين سطر الإدخال وقائمة الأسماء والأرقام. يجب أن تدرك أن هذا هو القصاصة الخلفية (AKA "لهجة قبر" - عادة ما يكون المفتاح الرئيسي أعلاه ، على يسار 1) وليس علامة اقتباس أحادية أو مفردة أمام كل ن.

    يعرض الجزء التالي طريقة مختلفة يمكنك استخدام حلقة ForEach-Object. عادةً ، عندما تريد أن يتم تشغيل مجموعة برامج نصية لعدد معين من المرات ، ستقوم بإعداد العادي للحل مثل لـ ($ x = 1 ؛ $ x -le $ UserInput ؛ $ x ++) . يتيح لنا ForEach-Object تبسيط ذلك من خلال تزويده بقائمة من الأعداد الصحيحة ، وبدلاً من إخباره بأن يقوم فعلاً بأي شيء مع تلك الأعداد الصحيحة ، فإننا فقط نمنحه كتلة نصية ثابتة للتشغيل حتى نفد من الأعداد الصحيحة للقيام بذلك..

    الجزء 3: توليد اسم عشوائي

    إن توليد الاسم هو أبسط جزء من بقية هذه العملية. ويتكون من ثلاث خطوات فقط: اختيار اللقب ، واختيار الجنس ، واختيار الاسم الأول. تذكر أن الاسم المستعار الذي قدمناه لـ Get-Random لحظة؟ الوقت لبدء وضع هذا للاستخدام.

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

    يأخذ السطر الأول قائمتنا من الألقاب ، ويغذيها في المنتقى العشوائي ، ويعين الاسم المختار إلى $ title.

    السطر الثاني يختار جنس شخصنا. تذكر كيف تبدأ عملية Get-Random بالعد من الصفر ، وكيف أن الصفر غير صحيح وكل شيء آخر صحيح؟ هذه هي الطريقة التي نستخدمها الحصول على عشوائي 2 (أو أقصر بكثير ز 2 بفضل الاسم المستعار لدينا - وكلاهما يؤدي إلى الاختيار بين صفر أو واحد) لتحديد ما إذا كان شخصنا ذكر أم لا. إذا اختر / else العبارة بعد ذلك بشكل عشوائي يختار الاسم الأول الذكر أو الأنثى وفقا لذلك.

    الجزء 4: توليد رقم هاتف عشوائي

    وهنا الجزء الممتع حقا. في وقت سابق ، أوضحنا لك كيف توجد عدة طرق يمكنك من خلالها إنشاء رقم هاتف غير صالح أو وهمي. نظرًا لأننا لا نريد أن تبدو جميع الأرقام متشابهة جدًا مع بعضها البعض ، فسنختار تنسيقًا عشوائيًا للرقم عشوائيًا في كل مرة. سيتم تحديد التنسيقات المختارة عشوائياً بواسطة رمز المنطقة ورمز التبادل ، الذي سيتم تخزينه جماعياً كبادئة $.

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

    السطر الأول هو إنشاء رقم عشوائي مباشر لاختيار التنسيق الذي سنتبعه لرقم الهاتف. ثم يأخذ بيان التبديل هذا الخيار العشوائي وينشئ بادئة $ وفقًا لذلك. تذكر أن قائمة أنواع أرقام الهاتف غير صالحة؟ تتوافق قيم NumberFormat $ 0-3 مع الأربعة الأولى في تلك القائمة. يمكن أن تولد القيمة 4 واحدة من الأخيرين ، حيث يستخدم كلاهما رمز التبادل "555".

    هنا ، يمكنك أيضًا رؤية أننا نستخدم حيلة أخرى مع علامات اقتباس مزدوجة. لا تسمح لك علامات الاقتباس المزدوجة فقط بتفسير المتغيرات قبل إخراج الخيط - كما أنها تتيح لك أيضًا التعامل مع كتل البرامج النصية. للقيام بذلك ، يمكنك التفاف كتلة البرنامج النصي مثل هذا: "$ ()". إذن ، ما لديك أعلاه هو الكثير من الأرقام العشوائية بشكل فردي ، مع بعض منها إما محدود في نطاقها أو تم تعيينه بشكل ثابت وفقًا للقواعد التي نحتاج إلى اتباعها. تحتوي كل سلسلة أيضًا على أقواس وتباعد كما تتوقع عادةً في زوج رمز المنطقة ورمز تبادل.

    آخر شيء يتعين علينا القيام به قبل أن نكون جاهزين لإخراج اسمنا ورقم الهاتف الخاص بنا هو إنشاء معرف مشترك ، والذي سيتم تخزينه باعتباره لاحقة $ Suffix.

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

    نظرًا للقواعد الخاصة لأرقام 555 ، لا يمكننا فقط إنشاء أربعة أرقام عشوائية لنهاية كل رقم هاتف سيعمل عليه نصنا. لذا ، فإن المفتاح الأول يتحقق مما إذا كنا نتعامل مع رقم 555. إذا لم يكن كذلك ، فإنه ينشئ أربعة أرقام عشوائية. إذا كان رقم 555 ، يتحقق رمز التبديل الثاني لرمز المنطقة 800. إذا كان هذا مطابقًا ، فهناك لاحقة صالحة واحدة يمكن أن نستخدمها. بخلاف ذلك ، يُسمح بالاختيار من أي شيء بين 0100-0199.

    لاحظ أن هناك عدة طرق مختلفة يمكن كتابة هذه المجموعة بها ، بدلاً من طريقة عملها. يمكن استبدال عبارات التبديل مع عبارات if / else ، نظرًا لأن كل منهما يتعامل فقط مع خيارين. أيضًا ، بدلاً من استدعاء "4" على وجه التحديد كخيار لعبارة التبديل الأولى ، كان من الممكن استخدام "الافتراضي" بشكل مشابه لطريقة عمله في الثانية نظرًا لأنه كان الخيار الوحيد المتبقي. الاختيار بين ما إذا كان / else مقابل التبديل ، أو مكان استخدام الكلمة الرئيسية الافتراضية بدلاً من القيم المحددة ، غالبًا ما يرجع إلى مسألة تفضيل شخصي. طالما أنه يعمل ، استخدم ما يناسبك أكثر.

    الآن ، حان الوقت للإخراج.

        كتابة المخرجات "$ FirstName $ Directory $ Prefix- $ Suffix"

    هذا واحد بسيط بقدر ما يحصل في البرنامج النصي. فإنه يخرج فقط الاسم الأول واسم العائلة مفصولتين بمسافات ، ثم مساحة أخرى قبل رقم الهاتف. في ما يلي كيفية إضافة الشرطة القياسية بين رمز Exchange ومعرّف المشترك.

    قوس الإغلاق في الأسفل هو نهاية حلقة ForEach-Object من وقت سابق - احذف هذا إذا كنت قد حصلت عليه بالفعل.

    الجزء 5: تنظيف وتشغيل البرنامج النصي

    بعد الانتهاء من جميع الأعمال ، يعرف النص الجيد كيفية التنظيف بعد نفسه. مرة أخرى ، لا تكون هناك حاجة بالفعل للإزالة المتغيرة أدناه إذا كنت ستقوم بتشغيل البرنامج النصي من وحدة التحكم فقط ، ولكنك ستحتاج إليه إذا كنت تخطط لتشغيله في ISE.

    إزالة الاسم المستعار للعنصر: \ g إزالة ScriptFolder متغير المتغير ، RequiredFiles ، اللقب ، ذكر ، FirstName ، NumberFormat ، البادئة ، لاحقة ، ValidInput ، UserInput

    بعد الانتهاء من كل ذلك ، احفظ البرنامج النصي بامتداد ".ps1" في نفس المجلد مثل ملفات الأسماء الخاصة بك. تأكد من تعيين ExecutionPolicy الخاص بك بحيث يمكن تشغيل البرنامج النصي ، ومنحها دوامة.

    في ما يلي لقطة شاشة للبرنامج النصي:

    يمكنك أيضًا تنزيل ملف ZIP يحتوي على هذا البرنامج النصي PowerShell والملفات النصية مع قوائم الأسماء ، من الرابط أدناه.

    اسم عشوائي ومولد رقم الهاتف ل PowerShell