โฮมเพจ » ทำอย่างไร » วิธีสร้างชื่อสุ่ม & หมายเลขโทรศัพท์ด้วย PowerShell

    วิธีสร้างชื่อสุ่ม & หมายเลขโทรศัพท์ด้วย PowerShell

    เมื่อคุณต้องการชุดข้อมูลสำหรับการทดสอบหรือสาธิตและชุดนั้นต้องการแสดงข้อมูลส่วนบุคคล (PII) โดยทั่วไปคุณไม่ต้องการใช้ข้อมูลจริงที่แสดงถึงคนจริง ที่นี่เราจะแนะนำวิธีการใช้ PowerShell เพื่อสร้างรายการชื่อสุ่มและหมายเลขโทรศัพท์สำหรับโอกาสดังกล่าว.

    สิ่งที่คุณต้องการ

    ก่อนที่คุณจะเริ่มมีเครื่องมือและข้อมูลที่คุณควรมี:

    PowerShell

    สคริปต์นี้ได้รับการพัฒนาโดยใช้ PowerShell 4.0 และได้รับการทดสอบความเข้ากันได้กับ PowerShell 2.0 PowerShell 2.0 หรือใหม่กว่าติดตั้งใน Windows มาตั้งแต่ Windows 7 นอกจากนี้ยังมีใน Windows XP และ Vista ซึ่งเป็นส่วนหนึ่งของ Windows Management Framework (WMF) รายละเอียดเพิ่มเติมและลิงค์สำหรับดาวน์โหลดอยู่ด้านล่าง.

    • PowerShell 2.0 มาพร้อมกับ Windows 7 ผู้ใช้ Windows XP SP3 และ Vista (SP1 หรือใหม่กว่า) สามารถดาวน์โหลดรุ่น WMF ที่เหมาะสมจาก Microsoft ใน KB968929 ไม่รองรับ XP XP หรือต่ำกว่าหรือ Vista ที่ไม่มี SP1.
    • PowerShell 4.0 มาพร้อมกับ Windows 8.1 ผู้ใช้ Windows 7 SP1 สามารถอัปเกรดเป็นส่วนหนึ่งของการปรับปรุง WMF ได้จากศูนย์ดาวน์โหลดของไมโครซอฟท์ ไม่สามารถใช้ได้สำหรับ XP หรือ Vista.

    ชื่อ

    คุณจะต้องมีรายชื่อเพื่อป้อนลงในเครื่องกำเนิดไฟฟ้าแบบสุ่ม แหล่งที่ดีสำหรับ จำนวนมาก ชื่อและข้อมูลเกี่ยวกับความนิยมของพวกเขา (แม้ว่าจะไม่ใช้สำหรับสคริปต์นี้) คือสำนักสำรวจสำมะโนประชากรของสหรัฐ รายการที่ลิงค์ด้านล่างมีขนาดใหญ่มากดังนั้นคุณอาจต้องการตัดออกเล็กน้อยถ้าคุณวางแผนที่จะสร้างชื่อและหมายเลขจำนวนมากพร้อมกัน ในระบบทดสอบของเราแต่ละคู่ชื่อ / หมายเลขใช้เวลาประมาณ 1.5 วินาทีในการสร้างโดยใช้รายการเต็มรูปแบบ แต่ระยะของคุณจะแตกต่างกันไปขึ้นอยู่กับสเป็คระบบของคุณเอง.

    • ชื่อสกุล
    • ชื่อแรกของชาย
    • ชื่อหญิง

    ไม่ว่าคุณจะใช้แหล่งข้อมูลใดคุณจะต้องสร้างไฟล์ข้อความสามไฟล์ที่สคริปต์สามารถใช้เป็นพูลสำหรับการเลือกชื่อ แต่ละไฟล์ควรมีชื่อเท่านั้นและหนึ่งชื่อต่อบรรทัดเท่านั้น จำเป็นต้องจัดเก็บไว้ในโฟลเดอร์เดียวกันกับสคริปต์ PowerShell ของคุณ.

    Surnames.txt ควรมีนามสกุลที่คุณต้องการให้สคริปต์เลือก ตัวอย่าง:

    สมิ ธ จอห์นสันวิลเลียมส์โจนส์บราวน์

    Males.txt ควรมีชื่อตัวผู้ที่คุณต้องการให้สคริปต์เลือก ตัวอย่าง:

    James John Robert Michael William

    Females.txt ควรมีชื่อหญิงที่คุณต้องการให้สคริปต์เลือกจาก ตัวอย่าง:

    Mary Patricia Linda Barbara Elizabeth

    กฎสำหรับหมายเลขโทรศัพท์

    หากคุณต้องการแน่ใจว่าหมายเลขโทรศัพท์ของคุณไม่ตรงกับหมายเลขโทรศัพท์จริงของทุกคนวิธีที่ง่ายที่สุดคือการใช้รหัสแลกเปลี่ยน "555" ที่รู้จักกันดี แต่ถ้าคุณกำลังจะแสดงชุดข้อมูลที่มีหมายเลขโทรศัพท์จำนวนมาก 555 จะเริ่มดูจำเจอย่างรวดเร็วจริงน่าเบื่อ เพื่อให้สิ่งต่าง ๆ น่าสนใจยิ่งขึ้นเราจะสร้างหมายเลขโทรศัพท์อื่น ๆ ที่ละเมิดกฎการกำหนดหมายเลขแผนอเมริกาเหนือ (NANP) ด้านล่างคือตัวอย่างหมายเลขโทรศัพท์ที่ไม่ถูกต้องซึ่งเป็นหมายเลขของแต่ละคลาสที่สคริปต์นี้สร้างขึ้น:

    • (157) 836-8167
      หมายเลขนี้ไม่ถูกต้องเนื่องจากรหัสพื้นที่ไม่สามารถเริ่มต้นด้วย 1 หรือ 0.
    • (298) 731-6185
      หมายเลขนี้ไม่ถูกต้องเนื่องจาก NANP ไม่ได้กำหนดรหัสพื้นที่ที่มี 9 เป็นหลักที่สอง.
    • (678) 035-7598
      หมายเลขนี้ไม่ถูกต้องเนื่องจากรหัสแลกเปลี่ยนไม่สามารถเริ่มต้นด้วย 1 หรือ 0.
    • (752) 811-1375
      หมายเลขนี้ไม่ถูกต้องเนื่องจากรหัสแลกเปลี่ยนไม่สามารถลงท้ายด้วยสอง 1 วินาที.
    • (265) 555-0128
      หมายเลขนี้ไม่ถูกต้องเนื่องจากรหัสแลกเปลี่ยนคือ 555, และ รหัสสมาชิกอยู่ในช่วงที่สงวนไว้สำหรับหมายเลขที่สมมติขึ้น.
    • (800) 555-0199
      หมายเลขนี้เป็นหมายเลข 800 เท่านั้นที่มีรหัสแลกเปลี่ยน 555 ซึ่งสงวนไว้สำหรับใช้เป็นหมายเลขที่สมมติขึ้น.

    โปรดทราบว่ากฎข้างต้นอาจมีการเปลี่ยนแปลงและอาจแตกต่างกันไปตามเขตอำนาจศาล คุณควรทำวิจัยของคุณเองเพื่อตรวจสอบกฎปัจจุบันที่ใช้กับสถานที่ที่คุณจะสร้างหมายเลขโทรศัพท์.

    คำสั่งทั่วไป

    มีคำสั่งที่ใช้กันทั่วไปพอสมควรซึ่งจะถูกนำมาใช้ตลอดสคริปต์นี้ดังนั้นคุณควรเข้าใจแนวคิดพื้นฐานของความหมายเหล่านี้ก่อนที่เราจะดำดิ่งลงไปในการเขียน.

    • ForEach วัตถุ รับอาร์เรย์หรือรายการของวัตถุและดำเนินการตามที่ระบุในแต่ละรายการ ภายในบล็อกสคริปต์ ForEach-Object ตัวแปร $ _ จะใช้เพื่ออ้างอิงถึงรายการปัจจุบันที่กำลังประมวลผล.
    • ถ้า…อื่น คำสั่งอนุญาตให้คุณทำการดำเนินการเฉพาะเมื่อตรงตามเงื่อนไขบางประการและ (เป็นทางเลือก) ระบุสิ่งที่ควรทำเมื่อไม่ปฏิบัติตามเงื่อนไขดังกล่าว.
    • สวิตซ์ งบเป็นเหมือนถ้างบที่มีตัวเลือกมากขึ้น สวิตช์จะตรวจสอบวัตถุกับหลายเงื่อนไขและเรียกใช้บล็อกสคริปต์ใด ๆ ที่ระบุไว้สำหรับเงื่อนไขที่วัตถุนั้นตรงกัน นอกจากนี้คุณยังสามารถเลือกระบุบล็อกเริ่มต้นซึ่งจะทำงานเฉพาะเมื่อไม่มีเงื่อนไขอื่น ๆ ที่ตรงกัน คำสั่ง Switch ยังใช้ตัวแปร $ _ เพื่ออ้างถึงรายการปัจจุบันที่กำลังประมวลผล.
    • ในขณะที่ ข้อความสั่งอนุญาตให้คุณทำซ้ำบล็อกสคริปต์อย่างต่อเนื่องตราบใดที่ตรงตามเงื่อนไขที่กำหนด เมื่อเกิดอะไรขึ้นที่ทำให้เงื่อนไขไม่เป็นจริงอีกต่อไปเมื่อบล็อกสคริปต์เสร็จสิ้นการวนซ้ำจะออก.
    • ลอง ... จับ คำสั่งช่วยด้วยการจัดการข้อผิดพลาด หากมีสิ่งใดผิดปกติกับบล็อกสคริปต์ที่ระบุเพื่อลองบล็อก catch จะทำงาน.
    • ได้รับการบริการเนื้อหา ทำในสิ่งที่พูดบนกระป๋อง ได้รับเนื้อหาของวัตถุที่ระบุ - โดยปกติแล้วเป็นไฟล์ สิ่งนี้สามารถใช้เพื่อแสดงเนื้อหาของไฟล์ข้อความที่คอนโซลหรือในสคริปต์นี้ส่งเนื้อหาตามไพพ์ไลน์เพื่อใช้กับคำสั่งอื่น ๆ.
    • เขียนเป็นเจ้าภาพ วางสิ่งของในคอนโซล ใช้เพื่อแสดงข้อความถึงผู้ใช้และไม่รวมอยู่ในเอาต์พุตของสคริปต์หากเอาต์พุตถูกเปลี่ยนเส้นทาง.
    • เขียนเอาท์พุท สร้างเอาต์พุตจริง โดยปกติจะถูกดัมพ์ไปยังคอนโซล แต่ยังสามารถถูกเปลี่ยนทิศทางโดยคำสั่งอื่น.

    มีคำสั่งอื่น ๆ ในสคริปต์ แต่เราจะอธิบายคำเหล่านั้นเมื่อเราไป.

    การสร้างสคริปต์

    ตอนนี้ถึงเวลาที่จะทำให้มือของเราสกปรก.

    ตอนที่ 1: เตรียมตัวให้พร้อม

    หากคุณต้องการให้สคริปต์ของคุณเริ่มทำงานจากคลีนคอนโซลนี่เป็นบรรทัดแรกที่คุณต้องการ.

    ล้างเจ้าภาพ

    ตอนนี้เรามีหน้าจอที่สะอาดแล้วสิ่งต่อไปที่เราต้องการคือให้มีการตรวจสอบสคริปต์เพื่อให้แน่ใจว่าทุกสิ่งที่ต้องการนั้นเข้าที่ ในการทำเช่นนั้นเราต้องเริ่มต้นด้วยการบอกให้ดูว่าจะหาที่ไหนและควรมองหาอะไร.

    $ ScriptFolder = เส้นทางแยก $ 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 ใช้ Test-Path เพื่อดูว่าไฟล์ที่เรากำลังค้นหาอยู่นั้นอยู่ตรงไหน เส้นทางทดสอบเป็นคำสั่งง่ายๆที่เมื่อได้รับเส้นทางของไฟล์จะส่งกลับการตอบสนองขั้นพื้นฐานจริงหรือเท็จเพื่อบอกเราว่าเส้นทางนั้นชี้ไปยังสิ่งที่มีอยู่จริงหรือไม่ เครื่องหมายอัศเจรีย์ในนั้นคือ ไม่ ผู้ประกอบการซึ่งย้อนกลับการตอบสนองของเส้นทางทดสอบก่อนที่จะส่งผ่านไปยังคำสั่ง if ดังนั้นหาก Test-Path ส่งคืนค่า false (นั่นคือไฟล์ที่เรากำลังค้นหาไม่มีอยู่) มันจะถูกแปลงเป็นจริงเพื่อให้คำสั่ง if จะดำเนินการบล็อกสคริปต์.

    อีกสิ่งที่ควรทราบที่นี่ซึ่งจะใช้บ่อยในสคริปต์นี้คือการใช้เครื่องหมายคำพูดคู่แทนการใช้เครื่องหมายคำพูดเดี่ยว เมื่อคุณใส่อะไรในเครื่องหมายคำพูดเดี่ยว PowerShell จะถือว่าเป็นสตริงแบบคงที่ สิ่งที่อยู่ในเครื่องหมายคำพูดเดียวจะถูกส่งผ่านไปตามที่เป็น เครื่องหมายอัญประกาศคู่บอก PowerShell ให้แปลตัวแปรและรายการพิเศษอื่น ๆ ภายในสตริงก่อนส่งผ่าน ที่นี่เครื่องหมายคำพูดคู่หมายความว่าแทนที่จะรัน เส้นทางทดสอบ '$ ScriptFolder \ $ _'  เราจะทำอะไรมากกว่านี้ เส้นทางทดสอบ 'C: \ Scripts \ Surnames.txt' (สมมติว่าสคริปต์ของคุณอยู่ใน C: \ Scripts และ ForEach-Object ทำงานบน 'Surnames.txt' ในปัจจุบัน).

    สำหรับแต่ละไฟล์ที่ไม่พบ Write-Host จะโพสต์ข้อความแสดงข้อผิดพลาดเป็นสีแดงเพื่อบอกให้คุณทราบว่าไฟล์ใดหายไป จากนั้นจะเพิ่มตัวแปร $ MissingFiles ซึ่งจะใช้ในส่วนถัดไปเพื่อเกิดข้อผิดพลาดและออกหากมีไฟล์ใดขาดหายไป.

    if ($ MissingFiles) Write-Host "ไม่พบไฟล์ต้นฉบับ $ MissingFiles สคริปต์การยกเลิก" -ForegroundColor Red ScriptFolder ลบตัวแปร, RequiredFiles, MissingFiles Exit

    นี่คือเคล็ดลับเรียบร้อย ๆ ที่คุณสามารถทำได้ถ้า if statement คำแนะนำส่วนใหญ่คุณจะเห็นว่าข้อความใดจะบอกให้คุณใช้โอเปอเรเตอร์เพื่อตรวจสอบเงื่อนไขการจับคู่ ตัวอย่างเช่นที่นี่เราสามารถใช้ ถ้า ($ MissingFiles -gt 0) เพื่อดูว่า $ MissingFiles มากกว่าศูนย์ อย่างไรก็ตามหากคุณกำลังใช้คำสั่งที่ส่งคืนค่าบูลีน (เช่นเดียวกับในบล็อกก่อนหน้าที่เราใช้ Test-Path) นั่นไม่จำเป็น คุณสามารถทำได้โดยไม่ต้องใช้ในกรณีเช่นนี้เมื่อคุณเพิ่งทดสอบเพื่อดูว่าตัวเลขไม่เป็นศูนย์หรือไม่ หมายเลขที่ไม่ใช่ศูนย์ใด ๆ (บวกหรือลบ) ได้รับการปฏิบัติเหมือนจริงในขณะที่ศูนย์ (หรืออาจเกิดขึ้นที่นี่ตัวแปรที่ไม่มีอยู่) จะถือว่าเป็นเท็จ.

    หากมี $ MissingFiles อยู่และไม่ใช่ศูนย์ Write-Host จะโพสต์ข้อความเพื่อบอกให้คุณทราบว่าไฟล์หายไปกี่ไฟล์และสคริปต์จะยกเลิก จากนั้น Remove-Variable จะล้างค่าตัวแปรทั้งหมดที่เราสร้างและออกจะออกจากสคริปต์ ที่คอนโซล PowerShell ปกติ Remove-Variable นั้นไม่จำเป็นสำหรับจุดประสงค์นี้โดยเฉพาะเนื่องจากตัวแปรที่กำหนดโดยสคริปต์นั้นจะถูกยกเลิกเมื่อสคริปต์ออก อย่างไรก็ตาม PowerShell ISE ทำงานแตกต่างกันเล็กน้อยดังนั้นคุณอาจต้องการเก็บไว้ในกรณีที่คุณวางแผนที่จะเรียกใช้สคริปต์จากที่นั่น.

    หากทุกอย่างเป็นไปตามลำดับสคริปต์จะดำเนินการต่อไป อีกหนึ่งการเตรียมที่จะทำคือนามแฝงที่เราจะดีใจในภายหลัง.

    ใหม่นามแฝงกรัมรับแบบสุ่ม

    นามแฝงจะใช้ในการสร้างชื่อสำรองสำหรับคำสั่ง สิ่งเหล่านี้มีประโยชน์ในการช่วยให้เราคุ้นเคยกับอินเทอร์เฟซใหม่ (เช่น: PowerShell มีชื่อแทนในตัวเช่น dir -> Get-ChildItem และ cat -> รับเนื้อหา) หรือเพื่ออ้างอิงสั้น ๆ สำหรับคำสั่งที่ใช้บ่อย ที่นี่เรากำลังทำ มาก การอ้างอิงระยะสั้นสำหรับ Get-สุ่ม คำสั่งที่กำลังจะถูกใช้ในภายหลัง.

    รับแบบสุ่มสวยมากทำในสิ่งที่ชื่อของมันหมายถึง กำหนดอาร์เรย์ (เช่นรายชื่อ) เป็นอินพุตมันเลือกไอเท็มแบบสุ่มจากอาร์เรย์และแยกออก นอกจากนี้ยังสามารถใช้เพื่อสร้างตัวเลขสุ่ม สิ่งที่ต้องจำเกี่ยวกับ Get-Random และตัวเลขคือว่าเช่นเดียวกับการใช้งานคอมพิวเตอร์อื่น ๆ มันเริ่มนับจากศูนย์ ดังนั้นแทนที่จะ รับสุ่ม 10 ความหมายที่เป็นธรรมชาติมากขึ้น "ให้ตัวเลขจาก 1 ถึง 10" จริง ๆ แล้วมันหมายถึง "ให้ตัวเลขจาก 0 ถึง 9" คุณสามารถเจาะจงมากขึ้นเกี่ยวกับการเลือกตัวเลขดังนั้น Get-Random จะทำงานเหมือนคุณโดยธรรมชาติ คาดหวัง แต่เราไม่ต้องการสิ่งนั้นในสคริปต์นี้.

    ส่วนที่ 2: การรับอินพุตของผู้ใช้และการทำงาน

    ในขณะที่สคริปต์ที่สร้างชื่อสุ่มและหมายเลขโทรศัพท์เพียงอันเดียวนั้นยอดเยี่ยม แต่จะดีกว่ามากหากสคริปต์อนุญาตให้ผู้ใช้ระบุจำนวน & หมายเลขที่ต้องการได้ในแบทช์เดียว น่าเสียดายที่เราไม่สามารถเชื่อถือได้ว่าผู้ใช้จะให้ข้อมูลที่ถูกต้องเสมอ ดังนั้นมันมีอะไรมากกว่านี้ $ UserInput = โฮสต์ที่อ่านแล้ว.

    ในขณะที่ (! $ ValidInput) ลอง [int] $ UserInput = Read-Host -Prompt 'รายการที่จะสร้าง' $ ValidInput = $ true catch Write-Host 'อินพุตที่ป้อนไม่ถูกต้อง ป้อนตัวเลขเท่านั้น ' -ForegroundColor Red

    คำสั่ง while ด้านบนตรวจสอบและคัดค้านค่าของ $ ValidInput ตราบใดที่ $ ValidInput เป็นเท็จหรือไม่มีอยู่ก็จะวนซ้ำไปเรื่อย ๆ ผ่านบล็อกสคริปต์.

    ข้อความสั่ง try ใช้อินพุตของผู้ใช้ผ่าน Read-Host และพยายามแปลงเป็นค่าจำนวนเต็ม (เป็นเรื่องที่ [int] ก่อน Read-Host.) หากประสบความสำเร็จก็จะกำหนด $ ValidInput เป็น true เพื่อให้ลูป while สามารถออกได้ หากไม่ประสบความสำเร็จ catch block จะโพสต์ข้อผิดพลาดและเนื่องจาก $ ValidInput ไม่ได้รับการตั้งค่าในขณะที่ลูปจะกลับมาและแจ้งให้ผู้ใช้อีกครั้ง.

    เมื่อผู้ใช้ป้อนหมายเลขเป็นอย่างถูกต้องแล้วเราต้องการให้สคริปต์ประกาศว่ากำลังจะเริ่มต้นใช้งานจริงและจากนั้นก็เริ่มทำมัน.

    เขียนโฮสต์ "'การสร้างชื่อผู้ใช้และหมายเลขโทรศัพท์ $ UserInput กรุณารอสักครู่ .. 1 ... $ UserInput | ForEach-Object 

    ไม่ต้องกังวลเราจะไม่ทิ้งคุณไว้เพื่อหารหัสตัวสร้างชื่อและหมายเลขแบบสุ่ม นั่นเป็นเพียงความคิดเห็นของตัวยึดตำแหน่งที่จะแสดงให้คุณเห็นว่าส่วนต่อไป (ที่งานจริงเสร็จ) จะเข้ากันได้ดี.

    บรรทัด Write-Host นั้นค่อนข้างตรงไปตรงมา มันเพียงแค่บอกจำนวนสคริปต์ที่จะสร้างชื่อและหมายเลขโทรศัพท์และขอให้ผู้ใช้อดทนในขณะที่สคริปต์ทำงาน'n ที่จุดเริ่มต้นและจุดสิ้นสุดของสตริงคือการแทรกบรรทัดว่างก่อนและหลังเอาท์พุทเพียงเพื่อให้มันมีการแยกภาพระหว่างบรรทัดอินพุตและรายการของชื่อและหมายเลข โปรดทราบว่านั่นเป็นเครื่องหมายขีดย้อนหลัง (AKA“ สำเนียงที่น่าเกรงขาม” - โดยปกติแล้วจะเป็นแท็บด้านบนทางด้านซ้ายของ 1) และไม่ใช่เครื่องหมายอะโพสโทรฟีหรือเครื่องหมายคำพูดเดียวต่อหน้า n.

    ส่วนถัดไปแสดงวิธีอื่นในการใช้ ForEach-Object loop โดยทั่วไปเมื่อคุณต้องการบล็อกสคริปต์ให้ทำงานตามจำนวนครั้งที่กำหนดคุณจะตั้งค่าปกติสำหรับการวนซ้ำเช่น สำหรับ ($ x = 1; $ x -le $ UserInput; $ x ++) . ForEach-Object ช่วยให้เราทำสิ่งนี้ง่ายขึ้นด้วยการป้อนรายการจำนวนเต็มและแทนที่จะบอกให้ทำอะไรกับจำนวนเต็มเหล่านั้นเราเพียงแค่ให้บล็อกสคริปต์แบบสแตติกทำงานจนกว่ามันจะหมดจำนวนเต็ม.

    ส่วนที่ 3: การสร้างชื่อแบบสุ่ม

    การสร้างชื่อเป็นบิตที่ง่ายที่สุดของกระบวนการที่เหลือ ประกอบด้วยเพียงสามขั้นตอน: การเลือกนามสกุลการเลือกเพศและการเลือกชื่อ จำได้ไหมว่านามแฝงที่เราสร้างขึ้นมารับสักครู่กลับมาใช่ไหม เวลาที่จะเริ่มวางที่จะใช้.

        $ Surname = รับเนื้อหา "$ ScriptFolder \ Surnames.txt" | g $ Male = g 2 ถ้า ($ Male) $ FirstName = รับเนื้อหา "$ ScriptFolder \ Males.txt" | g else $ FirstName = รับเนื้อหา "$ ScriptFolder \ Females.txt" | g

    บรรทัดแรกใช้รายชื่อนามสกุลป้อนเข้าสู่เครื่องมือเลือกแบบสุ่มและกำหนดชื่อที่เลือกให้กับ $ Surname.

    บรรทัดที่สองเลือกเพศของคนเรา โปรดจำไว้ว่า Get-Random เริ่มนับจากศูนย์ได้อย่างไรและศูนย์ใดเป็นเท็จและทุกอย่างอื่นเป็นจริงได้อย่างไร นั่นคือวิธีที่เราใช้ รับแบบสุ่ม 2 (หรือสั้นกว่านั้นมาก กรัม 2 ขอบคุณนามแฝงของเรา - ทำให้ทั้งคู่เลือกระหว่างศูนย์หรือหนึ่งคน) เพื่อตัดสินใจว่าคนของเราเป็นผู้ชายหรือไม่ คำสั่ง if / else หลังจากนั้นจะสุ่มเลือกชื่อชายหรือหญิงตามลำดับ.

    ตอนที่ 4: สร้างหมายเลขโทรศัพท์แบบสุ่ม

    นี่คือส่วนที่สนุกจริงๆ ก่อนหน้านี้เราแสดงให้คุณเห็นว่ามีหลายวิธีที่คุณสามารถสร้างหมายเลขโทรศัพท์ที่ไม่ถูกต้องหรือเป็นจริงได้ เนื่องจากเราไม่ต้องการให้ตัวเลขทั้งหมดของเราดูเหมือนกันเกินไปเราจะสุ่มเลือกรูปแบบตัวเลขที่ไม่ถูกต้องทุกครั้ง รูปแบบที่เลือกแบบสุ่มจะถูกกำหนดโดยรหัสพื้นที่และรหัสแลกเปลี่ยนซึ่งจะถูกเก็บรวมเป็น $ คำนำหน้า.

        $ NumberFormat = g 5 สวิตช์ ($ NumberFormat) 0 $ Prefix = "($ (g 2) $ (g 10) $ (g 10) $ (g 10)) $ (g 10) $ (g 10) $ (g 10)"  1 $ คำนำหน้า = "($ (g 10) 9 $ (g 10)) $ (g 10) $ (g 10) $ (g 10)" 2 $ คำนำหน้า = "($ (g 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 "

    บรรทัดแรกคือการสร้างหมายเลขสุ่มที่ตรงไปตรงมาเพื่อเลือกรูปแบบที่เราจะติดตามหมายเลขโทรศัพท์ จากนั้นคำสั่ง switch จะใช้ตัวเลือกแบบสุ่มนั้นและสร้าง $ Prefix ตามลำดับ จำรายการประเภทหมายเลขโทรศัพท์ที่ไม่ถูกต้องได้ไหม ค่า $ NumberFormat 0-3 สอดคล้องกับสี่รายการแรกในรายการนั้น ค่า 4 สามารถสร้างหนึ่งในสองสุดท้ายเนื่องจากทั้งคู่ใช้รหัสแลกเปลี่ยน“ 555”.

    ที่นี่คุณสามารถดูว่าเรากำลังใช้เคล็ดลับอื่นพร้อมเครื่องหมายคำพูดคู่ เครื่องหมายคำพูดคู่ไม่เพียงให้คุณตีความตัวแปรก่อนที่สตริงจะได้รับเอาต์พุต แต่ยังช่วยให้คุณสามารถประมวลผลบล็อกสคริปต์ได้ ในการทำเช่นนั้นคุณหุ้มบล็อกสคริปต์ดังนี้: “$ ()”. ดังนั้นสิ่งที่คุณมีข้างต้นเป็นตัวเลขสุ่มจำนวนมากโดยที่บางส่วนของพวกเขาถูก จำกัด ในช่วงของพวกเขาหรือตั้งค่าแบบคงที่ตามกฎที่เราต้องปฏิบัติตาม แต่ละสตริงมีวงเล็บและระยะห่างตามที่คุณคาดว่าจะเห็นในคู่ของรหัสพื้นที่และรหัสแลกเปลี่ยน.

    สิ่งสุดท้ายที่เราต้องทำก่อนที่เราจะพร้อมส่งออกชื่อและหมายเลขโทรศัพท์ของเราคือการสร้างรหัสสมาชิกซึ่งจะถูกเก็บไว้เป็น $ Suffix.

        switch ($ NumberFormat) $ _ -lt 4 $ Suffix = "$ (g 10) $ (g 10) $ (g 10) $ (g 10) $ (g 10)" 4 switch ($ คำนำหน้า) '( 800) 555 '$ Suffix =' 0199 ' ค่าเริ่มต้น $ Suffix = "01 $ (g 10) $ (g 10)"

    เนื่องจากกฎพิเศษสำหรับหมายเลข 555 เราไม่สามารถสร้างตัวเลขสุ่มสี่หลักสำหรับจุดจบของหมายเลขโทรศัพท์ทุกหมายเลขที่สคริปต์ของเราจะสร้าง ดังนั้นสวิตช์แรกจะตรวจสอบเพื่อดูว่าเรากำลังติดต่อกับหมายเลข 555 หรือไม่ ถ้าไม่ใช่มันจะสร้างตัวเลขสี่หลักแบบสุ่ม หากเป็นหมายเลข 555 สวิตช์ตัวที่สองจะตรวจสอบรหัสพื้นที่ 800 หากการแข่งขันนั้นมีเพียง $ Suffix ที่ถูกต้องเท่านั้นที่เราสามารถใช้ได้ มิฉะนั้นอนุญาตให้เลือกอะไรก็ได้ระหว่าง 0100-0199.

    โปรดทราบว่ามีวิธีการเขียนบล็อกนี้ที่แตกต่างกันสองสามวิธีแทนที่จะเป็น ทั้งสองคำสั่ง switch สามารถถูกแทนที่ด้วยคำสั่ง if / else เนื่องจากคำสั่งเหล่านั้นจัดการกับสองตัวเลือกเท่านั้น นอกจากนี้แทนที่จะเรียกออกมาเป็นพิเศษ "4" เป็นตัวเลือกสำหรับคำสั่งเปลี่ยนครั้งแรก "เริ่มต้น" อาจถูกนำมาใช้คล้ายกับวิธีการทำในวินาทีเพราะมันเป็นตัวเลือกเดียวที่เหลือ ตัวเลือกระหว่าง if / else กับสวิตช์หรือตำแหน่งที่จะใช้คำสำคัญเริ่มต้นแทนค่าเฉพาะมักเกิดขึ้นกับเรื่องของการตั้งค่าส่วนตัว ตราบใดที่มันใช้งานได้ใช้สิ่งที่คุณพอใจที่สุด.

    ตอนนี้ถึงเวลาเอาท์พุทแล้ว.

        เขียนออก "$ FirstName $ นามสกุล $ คำนำหน้า - $ Suffix"

    คนนี้เรียบง่ายมาก ๆ ตามที่ได้รับในสคริปต์ มันเพียงแค่ส่งออกชื่อและนามสกุลคั่นด้วยช่องว่างจากนั้นช่องว่างอื่นก่อนหมายเลขโทรศัพท์ ที่นี่คือที่ที่ขีดกลางมาตรฐานระหว่างรหัสการแลกเปลี่ยนและรหัสสมาชิกได้รับการเพิ่มเช่นกัน.

    วงเล็บปิดที่ด้านล่างคือจุดสิ้นสุดของการวน ForEach-Object จากก่อนหน้า - ละเว้นสิ่งนี้ถ้าคุณได้รับแล้ว.

    ส่วนที่ 5: ล้างข้อมูลและเรียกใช้สคริปต์

    หลังจากทำงานเสร็จแล้วสคริปต์ที่ดีก็จะรู้วิธีทำความสะอาดตัวเอง อีกครั้งการลบตัวแปรด้านล่างไม่จำเป็นจริงๆถ้าคุณเพียงแค่เรียกใช้สคริปต์จากคอนโซล แต่คุณจะต้องการถ้าคุณวางแผนที่จะเรียกใช้ใน ISE.

    นามแฝงการลบรายการ: \ g ลบ ScriptFolder ตัวแปร, RequiredFiles, นามสกุล, ชาย, ชื่อ, NumberFormat, คำนำหน้า, คำต่อท้าย, ValidInput, UserInput

    หลังจากคุณทำเสร็จแล้วให้บันทึกสคริปต์ด้วยส่วนขยาย“ .ps1” ในโฟลเดอร์เดียวกับไฟล์ชื่อของคุณ ตรวจสอบให้แน่ใจว่า ExecutionPolicy ของคุณได้รับการตั้งค่าเพื่อให้สคริปต์สามารถทำงานได้.

    นี่เป็นภาพหน้าจอของสคริปต์ที่ใช้งานจริง:

    นอกจากนี้คุณยังสามารถดาวน์โหลดไฟล์ ZIP ที่มีสคริปต์ PowerShell นี้และไฟล์ข้อความพร้อมรายชื่อได้จากลิงค์ด้านล่าง.

    เครื่องมือสร้างชื่อและหมายเลขโทรศัพท์แบบสุ่มสำหรับ PowerShell