10Sep

Cara Menghasilkan Nama Acak &Nomor Telepon dengan PowerShell

Bila Anda memerlukan kumpulan data untuk pengujian atau demonstrasi, dan kumpulan itu perlu mewakili Informasi Identifikasi Pribadi( PII), Anda biasanya tidak ingin menggunakan data nyata yang mewakili orang sebenarnya. Di sini, kami akan memandu Anda melalui bagaimana Anda dapat menggunakan PowerShell untuk menghasilkan daftar nama acak dan nomor telepon hanya untuk kesempatan seperti itu.

Apa yang Anda Butuhkan

Sebelum memulai, ada beberapa alat dan informasi yang seharusnya Anda dapatkan:

PowerShell

Skrip ini dikembangkan menggunakan PowerShell 4.0, dan juga telah diuji kompatibilitasnya dengan PowerShell 2.0.PowerShell 2.0 atau yang lebih baru telah terpasang pada Windows sejak Windows 7. Ini juga tersedia untuk Windows XP dan Vista sebagai bagian dari Windows Management Framework( WMF).Beberapa rincian lebih lanjut, dan link untuk download, ada di bawah ini.

  • PowerShell 2.0 hadir dengan Windows 7. Pengguna Windows XP SP3 dan Vista( SP1 atau yang lebih baru) dapat mendownload versi WMF yang sesuai dari Microsoft di KB968929.Hal ini tidak didukung pada XP SP2 atau di bawahnya, atau Vista tanpa SP1.
  • PowerShell 4.0 hadir dengan Windows 8.1.Pengguna Windows 7 SP1 dapat meng-upgrade ke dalamnya sebagai bagian dari pembaruan WMF dari Pusat Download Microsoft. Ini tidak tersedia untuk XP atau Vista.

Nama

Anda memerlukan beberapa daftar nama untuk dimasukkan ke generator acak. Sumber yang bagus untuk banyak nama, dan informasi mengenai popularitas mereka( meskipun itu tidak akan digunakan untuk skrip ini), adalah Biro Sensus Amerika Serikat. Daftar yang tersedia di link di bawah ini sangat besar, jadi Anda mungkin ingin memangkasnya sedikit jika Anda berencana menghasilkan banyak nama dan nomor sekaligus. Pada sistem pengujian kami, setiap pasangan nama / nomor membutuhkan sekitar 1,5 detik untuk menghasilkan daftar lengkap namun jarak tempuh Anda akan bervariasi tergantung pada spesifikasi sistem Anda sendiri.

  • Nama keluarga
  • Laki-laki Nama Pertama
  • Perempuan Nama Pertama

Terlepas dari sumber yang Anda gunakan, Anda perlu membuat tiga file teks yang bisa digunakan skrip sebagai kolam untuk pemilihan nama. Setiap file hanya berisi nama, dan hanya satu nama per baris. Ini perlu disimpan dalam folder yang sama dengan skrip PowerShell Anda.

Surnames.txt harus berisi nama keluarga yang Anda inginkan dari skrip yang akan dipilih. Contoh:

Smith Johnson Williams Jones Brown

Males.txt harus berisi nama depan laki-laki yang Anda inginkan dari skrip yang akan dipilih. Contoh:

James John Robert Michael William

Females.txt harus berisi nama depan wanita yang Anda inginkan dari skrip yang akan dipilih. Contoh:

Mary Patricia Linda Barbara Elizabeth

Aturan untuk Nomor Telepon

Jika Anda ingin memastikan nomor telepon Anda tidak sesuai dengan nomor telepon orang lain, cara termudah adalah dengan menggunakan "555" Exchange Code yang terkenal. Tapi jika Anda akan menunjukkan kumpulan data dengan banyak nomor telepon, 555 itu akan mulai terlihat sangat monoton dengan cepat. Agar lebih menarik, kami akan menghasilkan nomor telepon lain yang melanggar peraturan Nomor Penentuan Amerika Utara( NANP).Berikut adalah beberapa contoh nomor telepon tidak sah, mewakili setiap kelas nomor yang akan dihasilkan oleh skrip ini:

  • ( 157) 836-8167
    Nomor ini tidak berlaku karena Kode Area tidak dapat dimulai dengan 1 atau 0.
  • ( 298) 731-6185
    Nomor ini tidak valid karena NANP tidak menetapkan kode area dengan 9 sebagai digit kedua.
  • ( 678) 035-7598
    Nomor ini tidak berlaku karena Kode Exchange tidak dapat dimulai dengan angka 1 atau 0.
  • ( 752) 811-1375
    Angka ini tidak valid karena Kode Exchange tidak dapat diakhiri dengan dua 1s.
  • ( 265) 555-0128
    Nomor ini tidak valid karena Kode Exchange adalah 555, dan , ID Pelanggan berada dalam kisaran yang dicadangkan untuk nomor fiktif.
  • ( 800) 555-0199
    Nomor ini adalah satu-satunya nomor 800 dengan Kode 555 yang dipesan untuk digunakan sebagai nomor fiktif.

Perhatikan bahwa peraturan di atas dapat berubah dan mungkin berbeda menurut yurisdiksi. Anda harus melakukan penelitian Anda sendiri untuk memverifikasi peraturan terkini yang berlaku untuk lokasi tempat Anda menghasilkan nomor telepon. Perintah Umum

Ada beberapa perintah yang cukup umum yang akan digunakan sepanjang skrip ini, jadi Anda harus mendapatkan ide dasar tentang apa artinya sebelum kita terjun ke dalam penulisannya.

  • ForEach-Object mengambil sebuah array, atau daftar, objek dan melakukan operasi yang ditentukan pada masing-masingnya. Dalam blok script ForEach-Object, variabel $ _ digunakan untuk merujuk pada item yang sedang diproses.
  • jika. .. pernyataan lain memungkinkan Anda melakukan operasi hanya jika kondisi tertentu terpenuhi, dan( opsional) tentukan apa yang harus dilakukan bila kondisi tersebut tidak terpenuhi.
  • beralih pernyataan seperti jika pernyataan dengan lebih banyak pilihan. Switch akan memeriksa objek terhadap beberapa kondisi, dan menjalankan blok skrip apa pun yang ditentukan untuk kondisi yang cocok dengan objek. Anda juga dapat memilih secara default blok default yang hanya akan berjalan jika tidak ada kondisi lain yang cocok. Pernyataan switch juga menggunakan variabel $ _ untuk merujuk ke item yang sedang diproses.
  • sementara pernyataan memungkinkan Anda terus mengulangi blok naskah selama kondisi tertentu terpenuhi. Begitu terjadi sesuatu yang menyebabkan kondisi tidak lagi benar saat blok skrip selesai, loop keluar.
  • mencoba. .. menangkap pernyataan membantu penanganan kesalahan. Jika ada yang tidak beres dengan blok skrip yang ditentukan untuk dicoba, blok tangkapan akan berjalan.
  • Get-Content melakukan apa yang tertulis di kaleng. Ini mendapat isi dari objek tertentu - biasanya sebuah file. Ini bisa digunakan untuk menampilkan isi file teks di konsol atau, seperti pada skrip ini, letakkan isinya di sepanjang pipeline untuk digunakan dengan perintah lain.
  • Write-Host meletakkan barang di konsol. Ini digunakan untuk menyajikan pesan kepada pengguna, dan tidak disertakan dalam output skrip jika output diulang.
  • Write-Output sebenarnya menghasilkan output. Biasanya, ini dibuang ke konsol tapi bisa juga dialihkan oleh perintah lainnya.

Ada perintah lain dalam naskah, tapi kami akan menjelaskannya saat kami pergi.

Membangun Script

Sekarang saatnya untuk membuat tangan kita kotor.

Bagian 1: Mendapatkan Siap untuk Pergi

Jika Anda menyukai skrip Anda untuk mulai berjalan dari konsol bersih, inilah baris pertama yang Anda inginkan di dalamnya.

Clear-Host

Kini setelah kita memiliki layar yang bersih, hal berikutnya yang ingin kita lakukan adalah memeriksa skrip untuk memastikan semua yang dibutuhkannya ada pada tempatnya. Untuk melakukan itu, kita perlu mulai dengan mengatakan di mana mencarinya, dan apa yang harus dicari.

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

Baris pertama ada sangat berguna untuk skrip manapun. Ini mendefinisikan sebuah variabel yang menunjuk ke folder yang berisi script. Ini penting jika skrip Anda memerlukan file lain yang berada di direktori yang sama dengan dirinya sendiri( atau jalur relatif diketahui dari direktori itu), karena Anda mungkin akan menemukan kesalahan jika dan saat Anda mencoba menjalankan skrip saat berada di tempat lain.direktori kerja

Baris kedua menciptakan sebuah array dari nama file yang diperlukan agar skrip dijalankan dengan benar. Kami akan menggunakan ini, bersama dengan variabel $ ScriptFolder, di bagian selanjutnya di mana kami memeriksa untuk memastikan file-file itu ada.

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

Potongan skrip ini mengirimkan array $ RequiredFiles ke dalam blok ForEach-Object. Dalam blok script tersebut, jika pernyataan menggunakan Test-Path untuk melihat apakah file yang kita cari adalah tempat yang dimilikinya. Test-Path adalah perintah sederhana yang, bila diberi path file, mengembalikan respons dasar yang benar atau salah untuk memberi tahu kita jika jalan menunjuk pada sesuatu yang ada. Tanda seru di sana adalah operator bukan , yang membalikkan respons Test-Path sebelum meneruskannya ke pernyataan if. Jadi jika Test-Path mengembalikan false( yaitu file yang kita cari tidak ada), maka akan dikonversi menjadi true sehingga jika statement akan mengeksekusi blok skripnya.

Hal lain yang perlu diperhatikan di sini, yang akan sering digunakan dalam naskah ini, adalah penggunaan tanda kutip ganda dan bukan tanda kutip tunggal. Bila Anda memasukkan sesuatu ke dalam tanda kutip tunggal, PowerShell memperlakukannya sebagai string statis. Apapun yang ada dalam tanda kutip tunggal akan dilalui persis seperti apa adanya. Double-quotes memberitahu PowerShell untuk menerjemahkan variabel dan beberapa item spesial lainnya dalam string sebelum meneruskannya. Di sini, tanda kutip ganda berarti bahwa alih-alih menjalankan Test-Path '$ ScriptFolder \ $ _' , kita benar-benar akan melakukan sesuatu yang lebih mirip Test-Path 'C: \ Scripts \ Surnames.txt' ( dengan asumsi Andascript ada di C: \ Scripts, dan ForEach-Object saat ini sedang mengerjakan 'Surnames.txt').

Untuk setiap file yang tidak ditemukan, Write-Host akan mengirim pesan kesalahan berwarna merah untuk memberitahukan file mana yang hilang. Maka akan menambah variabel $ MissingFiles yang akan digunakan pada bagian berikutnya, untuk error dan berhenti jika ada file yang hilang.

if( $ MissingFiles){ Write-Host "Tidak dapat menemukan berkas sumber $ MissingFiles. Aborting script."-ForegroundColor Red Remove-Variable ScriptFolder, RequiredFiles, MissingFiles Exit}

Berikut adalah trik lain yang bisa Anda lakukan jika ada pernyataan. Sebagian besar panduan yang akan Anda lihat tentang apakah pernyataan akan meminta Anda untuk menggunakan operator untuk memeriksa kondisi yang sesuai. Sebagai contoh, di sini kita bisa menggunakan jika( $ MissingFiles-gt 0) untuk melihat apakah $ MissingFiles lebih besar dari nol. Namun, jika Anda sudah menggunakan perintah yang mengembalikan nilai boolean( seperti pada blok sebelumnya tempat kami menggunakan Test-Path) itu tidak perlu. Anda juga bisa melakukannya tanpa kasus seperti ini, saat Anda hanya menguji untuk melihat apakah ada nomor yang tidak nol. Setiap angka nol-nol( positif atau negatif) diperlakukan sebagai benar, sementara nol( atau, seperti yang mungkin terjadi di sini, variabel yang tidak ada) akan dianggap salah.

Jika $ MissingFiles ada, dan tidak nol, Write-Host akan mengirim pesan yang memberitahukan berapa banyak file yang hilang dan naskahnya akan dibatalkan. Kemudian, Remove-Variable akan membersihkan semua variabel yang telah kita buat dan Exit akan keluar dari script. Pada konsol PowerShell biasa, Remove-Variable tidak benar-benar diperlukan untuk tujuan khusus ini karena variabel yang ditetapkan oleh skrip biasanya dibuang saat skrip keluar. Namun, PowerShell ISE berperilaku sedikit berbeda sehingga Anda mungkin ingin menyimpannya jika Anda berencana menjalankan skrip dari sana.

Jika semuanya beres, naskah akan terus berlanjut. Satu lagi persiapan untuk membuat adalah sebuah alias yang akan sangat kita senangi nanti.

New-Alias ​​g Get-Random

Alias ​​digunakan untuk membuat nama alternatif untuk perintah. Ini bisa berguna untuk membantu kita berkenalan dengan antarmuka baru( misalnya: PowerShell memiliki alias built-in seperti dir-& gt; Get-ChildItem dan cat - & gt; Get-Content ) atau untuk membuat referensi singkatuntuk perintah yang biasa digunakanDi sini, kami membuat referensi singkat untuk perintah Get-Random yang akan banyak digunakan kemudian.

Get-Random cukup banyak melakukan apa namanya. Mengingat sebuah array( seperti daftar nama) sebagai masukan, ia mengambil item acak dari array dan meludahkannya. Ini juga bisa digunakan untuk menghasilkan bilangan acak. Hal yang perlu diingat tentang Get-Random dan nomornya adalah, seperti banyak operasi komputer lainnya, mulai menghitung dari nol. Jadi, bukan Get-Random 10 yang berarti lebih alami "beri saya nomor dari 1 sampai 10" itu benar-benar berarti "beri saya nomor dari 0 sampai 9." Anda bisa lebih spesifik tentang pemilihan jumlah, sehingga Get-Random berperilaku lebih seperti yang biasa Anda harapkan, tapi kami tidak membutuhkannya dalam skrip ini.

Bagian 2: Mendapatkan Masukan Pengguna dan Bekerja di

Sementara skrip yang menghasilkan hanya satu nama acak &nomor teleponnya bagus, jauh lebih baik jika scriptnya memungkinkan pengguna menentukan berapa nama &nomor mereka ingin masuk dalam satu batch. Sayangnya, kita tidak bisa benar-benar mempercayai pengguna untuk selalu memberikan masukan yang valid. Jadi, ada sedikit lebih banyak untuk ini daripada hanya $ UserInput = Read-Host .

sementara( ! $ ValidInput){ try{ [int] $ UserInput = Baca-Host -Prompt 'Item yang akan dihasilkan' $ ValidInput = $ true} tangkap{ Write-Host 'Masukan tidak benar. Masukkan nomor saja. '-ForegroundColor Red}}

Pernyataan sementara di atas memeriksa, dan meniadakan, nilai $ ValidInput. Selama $ ValidInput salah, atau tidak ada, ia akan terus melakukan perulangan melalui blok skripnya.

Pernyataan percobaan mengambil masukan pengguna, melalui Read-Host, dan mencoba mengubahnya menjadi nilai integer.(Itu [int] sebelum Read-Host.) Jika berhasil, akan menetapkan $ ValidInput menjadi true sehingga loop sementara bisa keluar. Jika tidak berhasil, blok tangkapan menyebabkan kesalahan dan, karena $ ValidInput tidak dapat disetel, loop sementara akan kembali dan meminta pengguna lagi.

Begitu pengguna memberi nomor yang benar sebagai masukan, kami ingin naskah tersebut mengumumkan bahwa ini akan mulai benar-benar melakukan pekerjaannya dan kemudian berhasil melakukannya.

Write-Host "` nGenerating $ UserInput names & nomor telepon. Mohon bersabar. `N" 1. . $ UserInput |ForEach-Object{ & lt; # INSERT RANDOM NAME &NUMBER GENERATOR SINI # & gt;}

Jangan khawatir, kami tidak akan meninggalkan Anda sendirian untuk mengetahui nama acak &nomor kode generatorItu hanya komentar placeholder untuk menunjukkan di mana bagian berikutnya( tempat pekerjaan sebenarnya selesai) akan sesuai.

Baris Write-Host sangat mudah. Ini hanya mengatakan berapa banyak nama dan nomor telepon naskah yang akan dihasilkan, dan meminta pengguna untuk bersabar saat naskah melakukan tugasnya. `n pada awal dan akhir string adalah memasukkan baris kosong sebelum dan sesudah keluaran itu, hanya untuk memberikan beberapa pemisahan visual antara garis input dan daftar nama &angka. Sadarilah bahwa itu adalah tanda centang tanda centang( AKA ") - biasanya tombol di atas, di sebelah kiri 1) dan bukan tanda kutip atau kutipan tunggal di depan setiap n .

Bagian selanjutnya menunjukkan cara yang berbeda Anda dapat menggunakan loop Objek Tujuan. Biasanya, bila Anda menginginkan sebuah blok skrip dijalankan dalam jumlah tertentu, Anda akan menyiapkan loop reguler seperti untuk( $ x = 1; $ x -le $ UserInput; $ x ++){ & lt; # INSERT SCRIPTSINI # & gt;}. ForEach-Object memungkinkan kita menyederhanakan ini dengan memberi makan daftar bilangan bulat dan, alih-alih mengatakannya untuk benar-benar melakukan sesuatu dengan bilangan bulat tersebut, kami hanya memberikan blok skrip statis untuk dijalankan sampai kehabisan bilangan bulat untuk melakukannya.

Bagian 3: Membangkitkan Nama Acak

Membangkitkan nama adalah bagian paling sederhana dari sisa proses ini. Ini hanya terdiri dari tiga langkah: Memilih nama keluarga, memilih jenis kelamin, dan memilih nama depan. Ingat itu alias yang kita buat untuk Get-Random sebentar lagi? Waktunya mulai menggunakannya.

$ Surname = Get-Content "$ ScriptFolder \ Surnames.txt" |g $ Pria = g 2 jika( $ Laki-laki){ $ FirstName = Get-Content "$ ScriptFolder \ Males.txt" |g} else{ $ FirstName = Get-Content "$ ScriptFolder \ Females.txt" |g}

Baris pertama mengambil daftar nama keluarga kami, memasukkannya ke dalam pemetik acak, dan memberikan nama yang dipilih ke $ Surname.

Baris kedua memilih jenis kelamin orang kita. Ingat bagaimana Get-Random mulai menghitung dari nol, dan bagaimana nol itu salah dan yang lainnya benar? Begitulah cara kita menggunakan Get-Random 2 ( atau yang lebih pendek g 2 berkat alias kita - keduanya menghasilkan pilihan antara nol atau satu) untuk memutuskan apakah orang kita laki-laki atau tidak. Pernyataan if / else kemudian secara acak memilih nama depan pria atau wanita sesuai dengan itu.

Bagian 4: Membangkitkan Nomor Telepon Acak

Inilah bagian yang sangat menyenangkan. Sebelumnya, kami menunjukkan kepada Anda bagaimana ada beberapa cara untuk membuat nomor telepon tidak valid atau fiktif. Karena kami tidak ingin semua nomor kami terlihat terlalu mirip satu sama lain, kami akan secara acak memilih format angka yang tidak valid setiap saat. Format yang dipilih secara acak akan ditentukan oleh Kode Wilayah dan Kode Bursa mereka, yang secara kolektif akan disimpan sebagai $ Awalan.

$ NumberFormat = g 5 switch( $ NumberFormat){ 0{ $ Prefix = "($( g 2) $( g 10) $( g 10)) $( g 10) $( g 10) $( g 10)"} 1{ $ Awalan ="( $( g 10) 9 $( g 10)) $( g 10) $( g 10) $( g 10) "} 2{ $ Awalan ="( $( g 10)$( g 10) $( g 10)) $( g 2) $( g 10) $( g 10) "} 3{ $ Awalan ="( $( g 10) $( g 10) $( g 10)) $( g 10) 11 "} 4{ $ Prefix ="( $( g 10) $( g 10) $( g 10)) 555 "}}

Baris pertama adalah generasi bilangan acak langsung untuk memilih format manakita akan mengikuti nomor teleponnya. Kemudian, pernyataan switch mengambil pilihan acak dan menghasilkan sebuah $ Prefix yang sesuai. Ingat daftar jenis nomor telepon yang tidak valid? Nilai $ NumberFormat 0-3 sesuai dengan empat yang pertama dalam daftar itu. Nilai 4 dapat menghasilkan salah satu dari dua kode terakhir, karena keduanya menggunakan "555" Exchange Code.

Di sini, Anda juga bisa melihat kami menggunakan trik lain dengan tanda kutip ganda. Double-quotes tidak hanya membiarkan Anda menafsirkan variabel sebelum string mendapatkan output - mereka juga membiarkan Anda memproses blok skrip. Untuk melakukan itu, Anda membungkus blok skrip seperti ini: "$( & lt; #SCRIPT HERE # & gt;)" .Jadi apa yang Anda miliki di atas adalah banyak digit acak secara individual, dengan beberapa di antaranya terbatas dalam jangkauan mereka atau ditetapkan secara statis sesuai peraturan yang harus diikuti. Setiap string juga memiliki kurung dan jarak seperti yang biasanya Anda harapkan bisa dilihat di kode Area Code dan Exchange Code.

Hal terakhir yang perlu kita lakukan sebelum kita siap untuk mengeluarkan nama &nomor telepon adalah untuk menghasilkan Subscriber ID, yang akan disimpan sebagai $ Suffix.

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

Karena aturan khusus untuk 555 nomor, kita tidak bisa hanyamenghasilkan empat digit acak untuk akhir setiap nomor telepon yang akan dibuat skrip kami. Jadi, tombol pertama memeriksa apakah kita berhadapan dengan nomor 555.Jika tidak, itu menghasilkan empat digit acak. Jika nomornya adalah 555, tombol kedua memeriksa kode area 800.Jika cocok, hanya ada satu $ Suffix yang bisa kita gunakan. Jika tidak, itu diperbolehkan untuk memilih dari apapun antara 0100-0199.

Perhatikan bahwa ada beberapa cara yang berbeda yang bisa ditulis blok ini, bukan seperti itu. Kedua pernyataan switch bisa saja diganti dengan pernyataan if / else, karena masing-masing hanya menangani dua pilihan. Selain itu, alih-alih secara khusus memanggil "4" sebagai opsi untuk pernyataan peralihan pertama, "default" dapat digunakan serupa dengan cara melakukannya pada langkah kedua karena ini adalah satu-satunya pilihan yang tersisa. Pilihan antara jika / else vs. switch, atau di mana menggunakan kata kunci default, bukan nilai spesifik, sering kali mengarah ke masalah preferensi pribadi. Selama bekerja, gunakan apapun yang paling Anda sukai.

Sekarang, saatnya untuk output.

Write-Output "$ FirstName $ Surname $ Prefix- $ Suffix"}

Yang satu ini cukup sederhana seperti yang ada dalam naskah. Ini hanya menampilkan nama depan dan belakang yang dipisahkan oleh spasi, lalu spasi lain sebelum nomor telepon. Di sinilah tempat teduh standar antara Kode Exchange dan Subscriber ID ditambahkan juga.

Penutup braket di bagian bawah adalah akhir loop ForEach-Object dari sebelumnya - hilangkan ini jika Anda sudah mendapatkannya.

Bagian 5: Pembersihan dan Menjalankan Script

Setelah semua pekerjaan selesai, naskah yang bagus tahu bagaimana cara membersihkannya sendiri. Sekali lagi, penghapusan variabel di bawah ini tidak benar-benar dibutuhkan jika Anda hanya menjalankan skrip dari konsol tapi Anda pasti menginginkannya jika Anda berencana menjalankannya di ISE.

Remove-Item alias: \ g Remove-Variable ScriptFolder, RequiredFiles, Surname, Male, FirstName, NumberFormat, Prefix, Suffix, ValidInput, UserInput

Setelah Anda menyelesaikan semuanya, simpan skrip dengan ekstensi ".ps1"di folder yang sama dengan nama file anda. Pastikan ExecutionPolicy Anda disetel sehingga skrip bisa berjalan, dan berikan pusaran.

Berikut adalah screenshot script yang sedang dijalankan:

Anda juga dapat mendownload file ZIP yang berisi skrip PowerShell ini, dan file teks dengan daftar nama, dari link di bawah ini.

Nama Acak &Generator Nomor Telepon untuk PowerShell