10Sep

Πώς να δημιουργήσετε τυχαία ονόματα &Τηλέφωνα με 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 SP2 ή παρακάτω, ή Vista χωρίς SP1.Το
  • PowerShell 4.0 συνοδεύεται από τα Windows 8.1.Οι χρήστες SP1 των Windows 7 μπορούν να αναβαθμίσουν σε αυτό ως μέρος μιας ενημερωμένης έκδοσης WMF από το Κέντρο λήψης της Microsoft.Δεν είναι διαθέσιμο για XP ή Vista.

Ονόματα

Θα χρειαστεί κάποιες λίστες ονομάτων για να τροφοδοτήσετε την τυχαία γεννήτρια.Μια μεγάλη πηγή για μια παρτίδα των ονομάτων και πληροφορίες σχετικά με τη δημοτικότητά τους( αν και αυτό δεν θα χρησιμοποιηθεί για αυτό το σενάριο), είναι το Γραφείο Απογραφής Ηνωμένων Πολιτειών.Οι λίστες που είναι διαθέσιμοι στους παρακάτω συνδέσμους είναι πολύ μεγάλοι, οπότε ίσως να θέλετε να τους κόψετε λίγο, εάν σχεδιάζετε να δημιουργείτε πολλά ονόματα και αριθμούς ταυτόχρονα.Στο δοκιμαστικό μας σύστημα, κάθε ζεύγος ονόματος / αριθμού χρειάστηκε περίπου 1,5 δευτερόλεπτα για να δημιουργήσει τη χρήση των πλήρων λιστών, αλλά τα χιλιόμετρα σας θα διαφέρουν ανάλογα με τις δικές σας προδιαγραφές συστήματος.

  • Επώνυμο
  • Αρσενικά πρώτα ονόματα
  • Αρσενικά πρώτα ονόματα

Ανεξάρτητα από την πηγή που χρησιμοποιείτε, θα χρειαστεί να δημιουργήσετε τρία αρχεία κειμένου που το σενάριο μπορεί να χρησιμοποιήσει ως ομάδες για την επιλογή του ονόματος.Κάθε αρχείο πρέπει να περιέχει μόνο ονόματα και μόνο ένα όνομα ανά γραμμή.Αυτά πρέπει να αποθηκεύονται στον ίδιο φάκελο με το σενάριο PowerShell.Το

Surnames.txt θα πρέπει να περιέχει τα επώνυμα από τα οποία θέλετε να επιλέξετε το σενάριο.Παράδειγμα:

Smith Johnson Williams Jones Brown

Males.txt Το θα πρέπει να περιέχει τα αρσενικά πρώτα ονόματα στα οποία θέλετε να επιλέξετε το σενάριο.Παράδειγμα:

James John Robert Michael Michael

Females.txt Το θα πρέπει να περιέχει τα θηλυκά ονόματα στα οποία θέλετε να επιλέξετε το σενάριο.Παράδειγμα:

Mary Patricia Linda Barbara Elizabeth

Κανόνες για τηλέφωνα

Αν θέλετε να είστε βέβαιοι ότι οι αριθμοί τηλεφώνου σας δεν ταιριάζουν με τον πραγματικό τηλεφωνικό αριθμό κανενός, ο ευκολότερος τρόπος είναι να χρησιμοποιήσετε τον γνωστό "555" Exchange Code.Αλλά αν πρόκειται να παρουσιάσετε ένα σύνολο δεδομένων με πολλούς αριθμούς τηλεφώνου, το 555 θα αρχίσει να φαίνεται αρκετά μονότονο πραγματικά γρήγορα.Για να κάνουμε τα πράγματα πιο ενδιαφέροντα, θα δημιουργήσουμε άλλους αριθμούς τηλεφώνου που παραβιάζουν τους κανόνες του NAPA( North American Numbering Plan).Παρακάτω είναι μερικοί δείκτες μη έγκυρων αριθμών τηλεφώνου που αντιπροσωπεύουν κάθε κλάση αριθμού που θα δημιουργηθεί από αυτό το σενάριο:

  • ( 157) 836-8167
    Αυτός ο αριθμός είναι άκυρος επειδή οι Κωδικοί περιοχής δεν μπορούν να ξεκινήσουν με 1 ή 0.
  • ( 298) 731-6185
    Αυτός ο αριθμός δεν είναι έγκυρος επειδή ο NANP δεν εκχωρεί τους κωδικούς περιοχής με το 9 ως το δεύτερο ψηφίο.
  • ( 678) 035-7598
    Αυτός ο αριθμός δεν είναι έγκυρος, επειδή οι κωδικοί Exchange δεν μπορούν να ξεκινούν με 1 ή 0.
  • ( 752) 811-1375
    Αυτός ο αριθμός είναι άκυρος επειδή οι κωδικοί Exchange δεν μπορούν να τερματίζονται με δύο 1 δευτερόλεπτα.
  • ( 265) 555-0128
    Αυτός ο αριθμός δεν είναι έγκυρος επειδή ο Κωδικός Exchange είναι 555, και Το αναγνωριστικό συνδρομητή βρίσκεται εντός του εύρους που προορίζεται για πλασματικούς αριθμούς.
  • ( 800) 555-0199
    Αυτός ο αριθμός είναι ο μόνος αριθμός 800 με κωδικό ανταλλαγής 555 που προορίζεται για χρήση ως εικονικός αριθμός.

Σημειώστε ότι οι παραπάνω κανόνες υπόκεινται σε αλλαγές και ενδέχεται να διαφέρουν ανάλογα με τη δικαιοδοσία.Θα πρέπει να κάνετε τη δική σας έρευνα για να επαληθεύσετε τους ισχύοντες κανόνες που ισχύουν για την τοπική ρύθμιση για την οποία θα δημιουργείτε τηλεφωνικούς αριθμούς.

Κοινές εντολές

Υπάρχουν κάποιες αρκετά συνηθισμένες εντολές που πρόκειται να χρησιμοποιηθούν σε όλο αυτό το σενάριο, οπότε πρέπει να πάρετε μια βασική ιδέα για το τι σημαίνουν αυτά πριν να βυθίσουμε στην πραγματικότητα να το γράψουμε.

  • ForEach-Object παίρνει έναν πίνακα ή μια λίστα αντικειμένων και εκτελεί την καθορισμένη λειτουργία σε καθένα από αυτά.Μέσα σε ένα μπλοκ δέσμης ενεργειών ForEach-Object, η μεταβλητή $ _ χρησιμοποιείται για να αναφερθεί στο τρέχον αντικείμενο που επεξεργάζεται.
  • εάν. .. οι δηλώσεις σάς επιτρέπουν να εκτελέσετε μια ενέργεια μόνο αν πληρούνται ορισμένες προϋποθέσεις και( προαιρετικά) να καθορίσετε τι πρέπει να γίνει όταν δεν πληρούται αυτή η προϋπόθεση.Οι εντολές
  • μεταγωγής είναι σαν οι δηλώσεις με περισσότερες επιλογές.Ο διακόπτης θα ελέγξει ένα αντικείμενο σε διάφορες συνθήκες και θα εκτελεστεί οποιεσδήποτε δέσμες ενεργειών δέσμης ενεργειών για συνθήκες που αντιστοιχούν στο αντικείμενο.Μπορείτε, επίσης, να ορίσετε προαιρετικά ένα προεπιλεγμένο μπλοκ το οποίο θα εκτελείται μόνο αν δεν συμφωνούνται άλλες συνθήκες.Οι εντολές μεταγωγής χρησιμοποιούν επίσης τη μεταβλητή $ _ για να αναφερθούν στο τρέχον στοιχείο που επεξεργάζεται.
  • ενώ οι εντολές σάς επιτρέπουν να επαναλαμβάνετε συνεχώς ένα μπλοκ δέσμης ενεργειών, εφόσον ικανοποιείται μια συγκεκριμένη συνθήκη.Μόλις συμβεί κάτι που κάνει την κατάσταση να μην είναι πλέον αληθής όταν ολοκληρωθεί η δέσμη ενεργειών, βγαίνει ο βρόχος.
  • δοκιμάστε. .. καταγραφή δηλώσεις βοήθεια με το χειρισμό σφαλμάτων.Αν κάτι πάει στραβά με το μπλοκ δέσμης ενεργειών που καθορίστηκε για δοκιμή, θα τρέξει το block catch.
  • Get-Content κάνει αυτό που λέει στο κασσίτερο.Λαμβάνει τα περιεχόμενα ενός συγκεκριμένου αντικειμένου - συνήθως ένα αρχείο.Αυτό μπορεί να χρησιμοποιηθεί για την εμφάνιση των περιεχομένων ενός αρχείου κειμένου στην κονσόλα ή, όπως και σε αυτή τη δέσμη ενεργειών, να περάσει το περιεχόμενο κατά μήκος του αγωγού που θα χρησιμοποιηθεί με άλλες εντολές.
  • Η υποδοχή εγγραφής τοποθετεί πράγματα στην κονσόλα.Αυτό χρησιμοποιείται για την παρουσίαση μηνυμάτων στον χρήστη και δεν περιλαμβάνεται στην έξοδο του σεναρίου αν η έξοδος παίρνει ανακατευθυνόμενη.
  • Έξοδος εγγραφής παράγει πραγματικά έξοδο.Κανονικά, αυτό βγαίνει στην κονσόλα, αλλά μπορεί επίσης να ανακατευθυνθεί από άλλες εντολές.

Υπάρχουν και άλλες εντολές στο σενάριο, αλλά θα τις εξηγήσουμε καθώς πηγαίνουμε.

Δημιουργία του Script

Τώρα ήρθε η ώρα να βγάλουμε τα χέρια μας.

Μέρος 1: Προετοιμασία για μετάβαση

Αν σας αρέσει το σενάριό σας να ξεκινάει από μια καθαρή κονσόλα, εδώ είναι η πρώτη γραμμή που θέλετε σε αυτό.

Clear-Host

Τώρα που έχουμε μια καθαρή οθόνη, το επόμενο πράγμα που θέλουμε να κάνουμε είναι να ελέγξουμε το σενάριο για να βεβαιωθούμε ότι όλα όσα χρειάζεται είναι στη θέση του.Για να γίνει αυτό, πρέπει να ξεκινήσουμε λέγοντάς μας από πού να κοιτάξουμε και τι να αναζητήσουμε.

$ ScriptFolder = Διαίρεση-Διαδρομή $ MyInvocation. MyCommand. Definition -Parent $ RequiredFiles =( 'Males.txt', 'Females.txt', 'Surnames.txt')

Η πρώτη γραμμή είναι πολύ χρήσιμη για κάθε δέσμη ενεργειών.Ορίζει μια μεταβλητή που δείχνει τον φάκελο που περιέχει το σενάριο.Αυτό είναι απαραίτητο αν το σενάριο σας χρειάζεται άλλα αρχεία που βρίσκονται στον ίδιο κατάλογο με τον ίδιο τον κατάλογο( ή μια γνωστή σχετική διαδρομή από αυτόν τον κατάλογο), επειδή διαφορετικά θα αντιμετωπίσετε σφάλματα αν και όταν προσπαθείτε να εκτελέσετε το σενάριο ενώ βρίσκεστε σε άλλοεργασίας.

Η δεύτερη γραμμή δημιουργεί μια σειρά από ονόματα αρχείων που απαιτούνται για τη σωστή λειτουργία του σεναρίου.Θα χρησιμοποιήσουμε αυτό, μαζί με τη μεταβλητή $ ScriptFolder, στο επόμενο κομμάτι, όπου ελέγχεται για να βεβαιωθούμε ότι υπάρχουν αυτά τα αρχεία.

$ RequiredFiles |ForEach-Object{ αν( !( Test-Path "$ ScriptFolder \ $ _")){ Γράψτε-Host "$ _ δεν βρέθηκε".-ForegroundColor Κόκκινο $ MissingFiles ++}}

Αυτό το κομμάτι δέσμης ενεργειών στέλνει τον πίνακα $ RequiredFiles σε ένα μπλοκ ForEach-Object.Μέσα σε αυτό το μπλοκ δέσμης ενεργειών, η εντολή if χρησιμοποιεί Test-Path για να δει αν το αρχείο που ψάχνουμε είναι όπου ανήκει.Το Test-Path είναι μια απλή εντολή που, όταν δίνεται μια διαδρομή αρχείου, επιστρέφει μια βασική αληθινή ή ψευδή απάντηση για να μας πει εάν η διαδρομή δείχνει σε κάτι που υπάρχει.Το θαυμαστικό εκεί είναι ένας χειριστής που δεν είναι ο χρήστης , ο οποίος αναστρέφει την απόκριση του διαδρομής δοκιμής πριν το μεταβιβάσει στη δήλωση if.Αν λοιπόν το Test-Path επιστρέψει ψευδές( δηλαδή, το αρχείο που ψάχνουμε δεν υπάρχει), θα μετατραπεί σε true έτσι ώστε η εντολή if να εκτελέσει το block script.

Ένα άλλο πράγμα που πρέπει να σημειωθεί εδώ, το οποίο θα χρησιμοποιηθεί συχνά σε αυτό το σενάριο, είναι η χρήση διπλών εισαγωγικών αντί για μονό-εισαγωγικά.Όταν βάζετε κάτι σε ενιαία εισαγωγικά, το PowerShell το αντιμετωπίζει ως στατική συμβολοσειρά.Οποιοσδήποτε υπάρχει στα μοναδικά αποσπάσματα θα περάσει ακριβώς όπως είναι.Τα διπλά εισαγωγικά λέει στο PowerShell να μεταφράσει τις μεταβλητές και κάποια άλλα ειδικά στοιχεία μέσα στην συμβολοσειρά πριν τα μεταβιβάσει.Εδώ, τα διπλά εισαγωγικά σημαίνουν ότι αντί να τρέξουμε Test-Path '$ ScriptFolder \ $ _' θα κάνουμε πραγματικά κάτι περισσότερο σαν Test-Path 'C: \ Scripts \ Surnames.txt' το script είναι στο C: \ Scripts και το ForEach-Object εργάζεται επί του παρόντος στο 'Surnames.txt').

Για κάθε αρχείο που δεν βρέθηκε, το Write-Host θα δημοσιεύσει ένα μήνυμα σφάλματος με κόκκινο χρώμα για να σας πει ποιο αρχείο λείπει.Στη συνέχεια αυξάνεται η μεταβλητή $ MissingFiles που θα χρησιμοποιηθεί στο επόμενο κομμάτι, σε σφάλμα και θα τερματιστεί αν λείπουν κάποια αρχεία.

αν( $ MissingFiles){ Write-Host "Δεν ήταν δυνατή η εύρεση αρχείων προέλευσης $ MissingFiles.-ForegroundColor Κόκκινο Κατάργηση-Μεταβλητό ScriptFolder, RequiredFiles, MissingFiles Έξοδος}

Εδώ είναι ένα άλλο κομψό τέχνασμα που μπορείτε να κάνετε εάν δηλώσεις.Οι περισσότεροι οδηγοί θα δείτε εάν οι δηλώσεις θα σας ενημερώσουν για να χρησιμοποιήσετε έναν χειριστή για να ελέγξετε αν υπάρχει αντίστοιχη συνθήκη.Για παράδειγμα, εδώ θα μπορούσαμε να χρησιμοποιήσουμε αν( $ MissingFiles -gt 0) για να δούμε αν $ MissingFiles είναι μεγαλύτερο από το μηδέν.Ωστόσο, αν χρησιμοποιείτε ήδη εντολές που επιστρέφουν μια τιμή boolean( όπως στο προηγούμενο μπλοκ όπου χρησιμοποιούσαμε το Test-Path), αυτό δεν είναι απαραίτητο.Μπορείτε επίσης να το κάνετε χωρίς να το κάνετε σε περιπτώσεις όπως αυτό, όταν δοκιμάζετε μόνο για να διαπιστώσετε εάν ένας αριθμός είναι μηδενικός.Οποιοσδήποτε μη μηδενικός αριθμός( θετικός ή αρνητικός) αντιμετωπίζεται ως αληθής, ενώ μηδέν( ή, όπως συμβαίνει εδώ, ανύπαρκτη μεταβλητή), θα θεωρείται ψευδής.

Εάν υπάρχει $ MissingFiles και είναι μη μηδέν, ο Write-Host θα δημοσιεύσει ένα μήνυμα που θα σας ενημερώνει πόσες λείπουν και ότι το script θα ακυρωθεί.Στη συνέχεια, το Remove-Variable θα καθαρίσει όλες τις μεταβλητές που έχουμε δημιουργήσει και το Exit θα τερματίσει τη δέσμη ενεργειών.Στην κανονική κονσόλα PowerShell, δεν χρειάζεται πραγματικά η εντολή Κατάργηση μεταβλητής για αυτόν τον συγκεκριμένο σκοπό, επειδή οι μεταβλητές που ορίζονται από δέσμες ενεργειών απορρίπτονται κανονικά κατά την έξοδο του σεναρίου.Ωστόσο, το PowerShell ISE συμπεριφέρεται λίγο διαφορετικά, επομένως μπορεί να θέλετε να το κρατήσετε αν σκοπεύετε να εκτελέσετε το σενάριο από εκεί.

Εάν όλα είναι καλά, το σενάριο θα συνεχιστεί.Μια ακόμη προετοιμασία για να γίνει είναι ένα ψευδώνυμο ότι θα χαρούμε πολύ να έχουμε αργότερα.

Νέα-Alias ​​g Λήψη-Τυχαία

Τα ψευδώνυμα χρησιμοποιούνται για τη δημιουργία εναλλακτικών ονομάτων για τις εντολές.Αυτά μπορεί να είναι χρήσιμα για να μας βοηθήσουν να γνωρίσουμε τη νέα διεπαφή( π.χ.: Το PowerShell έχει ενσωματωμένα ψευδώνυμα όπως dir - & gt; Get-ChildItem και cat - & gt; Get-Content )για κοινές εντολές.Εδώ, κάνουμε μια πολύ σύντομη αναφορά για την Get-Random εντολή που πρόκειται να χρησιμοποιηθεί πολύ αργότερα.

Get-Random κάνει σχεδόν ό, τι υπονοεί το όνομά του.Δεδομένου ότι ένας πίνακας( όπως μια λίστα ονομάτων) ως είσοδος, επιλέγει ένα τυχαίο στοιχείο από τον πίνακα και το εκτοξεύει.Μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία τυχαίων αριθμών.Το πράγμα που πρέπει να θυμάστε σχετικά με το Get-Random και οι αριθμοί όμως είναι ότι, όπως πολλές άλλες λειτουργίες υπολογιστών, αρχίζει να μετρά από το μηδέν.Έτσι, αντί για Get-Random 10 που σημαίνει το πιο φυσικό "δώστε μου έναν αριθμό από το 1 έως το 10" σημαίνει πραγματικά "δώσε μου έναν αριθμό από το 0 έως το 9." Μπορείτε να είστε πιο συγκεκριμένοι για την επιλογή αριθμού,-Random συμπεριφέρεται περισσότερο όπως θα περίμενα φυσικά, αλλά δεν θα χρειαστεί αυτό σε αυτό το σενάριο.

Μέρος 2: Εισαγωγή χρήστη και έναρξη λειτουργίας

Ενώ ένα σενάριο που παράγει μόνο ένα τυχαίο όνομα &ο αριθμός τηλεφώνου είναι μεγάλος, είναι πολύ καλύτερο αν το σενάριο επιτρέπει στο χρήστη να καθορίσει πόσα ονόματα &αριθμούς που θέλουν να πάρουν σε μια παρτίδα.Δυστυχώς, δεν μπορούμε πραγματικά να εμπιστευόμαστε τους χρήστες να δίνουν πάντα έγκυρη εισροή.Έτσι, υπάρχει ένα μικρό κομμάτι περισσότερο από αυτό απλά $ UserInput = Read-Host .

ενώ( ! $ ValidInput){ try{ [int] $ UserInput = Ανάγνωση-Υποδοχή-Προώθηση 'Στοιχεία που θα δημιουργηθούν' $ ValidInput = $ true} catch{ Write-Host 'Εισαγάγετε μόνο έναν αριθμό. '-ForegroundColor Red}}

Η εντολή while ελέγχει και ακυρώνει την τιμή του $ ValidInput.Εφόσον το $ ValidInput είναι ψευδές ή δεν υπάρχει, θα διατηρήσει το βρόχο μέσα από το block script.

Η εντολή try παίρνει την είσοδο του χρήστη, μέσω του Read-Host και προσπαθεί να την μετατρέψει σε μια ακέραια τιμή.(Αυτό είναι το [int] πριν από την Read-Host.) Εάν είναι επιτυχής, θα θέσει το $ ValidInput σε αληθές, ώστε ο βρόχος while να βγει.Εάν δεν είναι επιτυχής, το μπλοκ αλίευσης παρουσιάζει ένα σφάλμα και, επειδή το $ ValidInput δεν έχει οριστεί, ο βρόχος while θα επιστρέψει και θα ξαναδώσει τον χρήστη ξανά.

Αφού ο χρήστης έχει δώσει σωστά έναν αριθμό ως είσοδο, θέλουμε το σενάριο να ανακοινώσει ότι πρόκειται να αρχίσει να κάνει την εργασία του και στη συνέχεια να το κάνει.

Write-Host "` nΔημιουργία $ UserInput ονόματα & αριθμούς τηλεφώνου.Παρακαλώ περιμένετε. . 'n "1. . $ UserInput |ForEach-Object{ & lt; # INSERT RANDOM NAME &ΑΡΙΘΜΟΣ ΓΕΝΝΗΤΟΣ ΕΔΩ # & gt;}

Μην ανησυχείτε, δεν πρόκειται να σας αφήσουμε μόνοι σας για να καταλάβουμε το τυχαίο όνομα &κωδικό γεννήτριας αριθμών.Αυτό είναι απλώς ένα σχόλιο κράτησης θέσης για να σας δείξει πού θα χωρέσει το επόμενο τμήμα( όπου γίνεται η πραγματική δουλειά).

Η γραμμή Write-Host είναι αρκετά απλή.Απλώς λέει πόσα ονόματα και αριθμούς τηλεφώνου το σενάριο πρόκειται να δημιουργήσει και ζητά από τον χρήστη να είναι υπομονετικός ενώ το σενάριο κάνει τη δουλειά του.Το `n στην αρχή και στο τέλος της συμβολοσειράς είναι να εισάγετε μια κενή γραμμή πριν και μετά από αυτή την έξοδο, ακριβώς για να της δώσετε κάποιο οπτικό διαχωρισμό μεταξύ της γραμμής εισόδου και της λίστας ονομάτων &αριθμούς.Να γνωρίζετε ότι αυτό είναι ένα back-tick( AKA "σοβαρή προφορά" - συνήθως το πλήκτρο πάνω από την καρτέλα, στα αριστερά του 1) και όχι ένα απόστροφο ή ένα μοναδικό απόσπασμα μπροστά σε κάθε n .

Το επόμενο τμήμα παρουσιάζει έναν διαφορετικό τρόπο που μπορείτε να χρησιμοποιήσετε έναν βρόχο ForEach-Object.Συνήθως, όταν θέλετε ένα μπλοκ δέσμης ενεργειών να εκτελείται ορισμένο αριθμό φορές, θα ρυθμίσετε ένα κανονικό βρόχο όπως το για( $ x = 1; $ x -le $ UserInput; $ x ++){ & lt; # INSERT SCRIPTΕΔΩ # & gt;}.Το ForEach-Object μας επιτρέπει να το απλοποιήσουμε δίνοντάς του μια λίστα με ακέραιους αριθμούς και αντί να του λέμε να κάνει τίποτα με αυτούς τους ακέραιους, του δίνουμε απλώς ένα στατικό μπλοκ δέσμης ενεργειών για να τρέξει μέχρι να ξεμείνει από ακεραίους για να το κάνει.

Μέρος 3: Δημιουργία τυχαίου ονόματος

Η παραγωγή του ονόματος είναι το απλούστερο bit της υπόλοιπης διαδικασίας.Αποτελείται μόνο από τρία βήματα: Να επιλέξει ένα επώνυμο, να πάρει ένα φύλο και να πάρει ένα όνομα.Θυμηθείτε ότι ψευδώνυμο που κάναμε για Get-Random για λίγο πίσω;Ώρα να αρχίσετε να το χρησιμοποιείτε.

$ Επίθετο = Λήψη περιεχομένου "$ ScriptFolder \ Surnames.txt" |g $ Αρσενικό = g 2 αν( $ Αρσενικό){ $ FirstName = Λήψη περιεχομένου "$ ScriptFolder \ Males.txt" |g} αλλού{ $ FirstName = Αποκτήστε περιεχόμενο "$ ScriptFolder \ Females.txt" |g}

Η πρώτη γραμμή παίρνει τη λίστα με τα επώνυμα, την τροφοδοτεί στον τυχαίο επιλογέα και αναθέτει το επιλεγμένο όνομα στο $ Επώνυμο.

Η δεύτερη γραμμή επιλέγει το φύλο του ατόμου μας.Θυμηθείτε πως ξεκινάει η μέτρηση Get-Random από το μηδέν και πως το μηδέν είναι ψευδές και ότι όλα τα άλλα είναι αληθινά;Αυτός είναι ο τρόπος με τον οποίο χρησιμοποιούμε το Get-Random 2 ( ή το πολύ μικρότερο g 2 χάρη στο ψευδώνυμό μας - και οι δύο έχουν ως αποτέλεσμα την επιλογή μεταξύ μηδέν ή ενός) για να αποφασίσουμε αν το άτομό μας είναι αρσενικό ή όχι.Η δήλωση if / else μετά επιλέγει τυχαία ένα αρσενικό ή θηλυκό όνομα ανάλογα.

Μέρος 4: Δημιουργία τυχαίου αριθμού τηλεφώνου

Εδώ είναι το πραγματικά διασκεδαστικό μέρος.Νωρίτερα, σας παρουσιάσαμε πώς υπάρχουν διάφοροι τρόποι να κάνετε έναν άκυρο ή πλασματικό αριθμό τηλεφώνου.Δεδομένου ότι δεν θέλουμε όλοι οι αριθμοί μας να φαίνονται πολύ παρόμοιοι μεταξύ τους, θα επιλέξουμε τυχαία μια μη έγκυρη μορφή αριθμών κάθε φορά.Οι τυχαία επιλεγμένες μορφές θα οριστούν από τον Κωδικό Περιοχής και τον Κώδικα Exchange, ο οποίος συλλογικά θα αποθηκευτεί ως πρόθεμα $.

$ NumberFormat = g 5 διακόπτης( $ NumberFormat){ 0{ $ Prefix = "($( g 2) $( g 10) $( g 10)"}{ 1}{ $ Prefix ="( $( g 10) 9 $( g 10)) $( g 10) $( g 10)$( g 10) $( g 10)) $( g 2) $( g 10) $( g 10) "} 3{ $ Prefix =) $( g 10) 11 "} 4{ $ Prefix ="( $( g 10) $( g 10) $( g 10)) 555 "

Η πρώτη γραμμή είναι μια απλή γεννήτρια τυχαίων αριθμώνθα ακολουθήσουμε τον αριθμό τηλεφώνου.Στη συνέχεια, η εντολή διακόπτη παίρνει αυτή την τυχαία επιλογή και παράγει ένα πρόθεμα $ αντίστοιχα.Να θυμάστε ότι η λίστα των μη έγκυρων τύπων αριθμών τηλεφώνου;Οι τιμές $ NumberFormat 0-3 αντιστοιχούν στα πρώτα τέσσερα σε αυτήν τη λίστα.Η τιμή 4 μπορεί να δημιουργήσει μία από τις δύο τελευταίες, καθώς και οι δύο χρησιμοποιούν τον "555" Exchange Code.

Εδώ μπορείτε επίσης να δείτε ότι χρησιμοποιούμε ένα άλλο τέχνασμα με διπλά εισαγωγικά.Τα διπλά εισαγωγικά δεν σας αφήνουν να ερμηνεύσετε τις μεταβλητές πριν από την έξοδο μιας συμβολοσειράς - σας επιτρέπουν επίσης να επεξεργαστείτε μπλοκ δέσμης ενεργειών.Για να το κάνετε αυτό, τυλίγετε το μπλοκ δέσμης ενεργειών όπως αυτό: "$( & lt; # SCRIPT HERE # & gt;)" .Επομένως, αυτό που έχετε παραπάνω είναι πολλά ατομικά τυχαία ψηφία, με μερικά από αυτά είτε περιορισμένα στην εμβέλειά τους είτε σταθερά σύμφωνα με τους κανόνες που πρέπει να ακολουθήσουμε.Κάθε συμβολοσειρά έχει επίσης παρένθεση και απόσταση, όπως κανονικά θα περίμενε κανείς να δει σε ένα ζεύγος κωδικού περιοχής και κωδικού ανταλλαγής.

Το τελευταίο πράγμα που πρέπει να κάνουμε πριν είμαστε έτοιμοι να βγάλουμε το όνομά μας &ο αριθμός τηλεφώνου δημιουργεί ένα αναγνωριστικό συνδρομητή, το οποίο θα αποθηκευτεί ως $ Suffix.Διακόπτης

( $ NumberFormat){ {$ _ -lt 4}{ $ Suffix = "$( g 10) $( g 10) $( g 10)(800) 555 '{$ Suffix =' 0199 '} προεπιλογή{ $ Suffix = "01 $( g 10) $( g 10)"}}}}

Λόγω των ειδικών κανόνων για 555 αριθμούς,παράγουν τέσσερα τυχαία ψηφία για το τέλος κάθε τηλεφωνικού αριθμού που θα κάνει το σενάριό μας.Έτσι, ο πρώτος διακόπτης ελέγχει εάν έχουμε να κάνουμε με έναν αριθμό 555.Αν όχι, παράγει τέσσερα τυχαία ψηφία.Εάν είναι ένας αριθμός 555, ο δεύτερος διακόπτης ελέγχει για τον κωδικό περιοχής 800.Εάν αυτό ταιριάζει, υπάρχει μόνο ένα έγκυρο $ Suffix που μπορούμε να χρησιμοποιήσουμε.Διαφορετικά, επιτρέπεται να επιλέξει από οτιδήποτε μεταξύ 0100-0199.

Σημειώστε ότι υπάρχουν μερικοί διαφορετικοί τρόποι με τους οποίους αυτό το μπλοκ θα μπορούσε να έχει γραφτεί, αντί του τρόπου με τον οποίο είναι.Και οι δύο εντολές διακόπτη θα μπορούσαν να αντικατασταθούν με if / else δηλώσεις, δεδομένου ότι ο καθένας χειρίζεται μόνο δύο επιλογές.Επίσης, αντί για συγκεκριμένη κλήση του "4" ως επιλογή για την πρώτη εντολή διακόπτη, η "προεπιλογή" θα μπορούσε να χρησιμοποιηθεί παρόμοια με το πώς έγινε στο δεύτερο δεδομένου ότι ήταν η μόνη επιλογή που απομένει.Η επιλογή μεταξύ του εάν / αλλιώς εναντίον του διακόπτη ή του πού να χρησιμοποιηθεί η προεπιλεγμένη λέξη-κλειδί αντί για συγκεκριμένες τιμές, συχνά έρχεται κάτω από ένα ζήτημα προσωπικής προτίμησης.Εφόσον λειτουργεί, χρησιμοποιήστε ό, τι είστε πιο άνετα με.

Τώρα, ήρθε η ώρα για έξοδο.

Έξοδος εγγραφής "$ FirstName $ Επώνυμο $ Prefix- $ Suffix"}

Αυτό είναι σχεδόν τόσο απλό όσο παίρνει στο σενάριο.Απλώς εξάγει το όνομα και το επώνυμο χωρισμένα με κενά, έπειτα έναν άλλο χώρο πριν τον αριθμό τηλεφώνου.Ακολουθεί η προσθήκη της τυπικής παύλας μεταξύ του Κωδικού Exchange και του Συνδρομητή.

Αυτός ο βραχίονας κλεισίματος στο κάτω μέρος είναι το τέλος του βρόχου ForEach-Object από νωρίτερα - παραλείψτε αυτό εάν το έχετε ήδη πάρει.

Μέρος 5: Εκκαθάριση και εκτέλεση της δέσμης ενεργειών

Αφού ολοκληρωθεί η εργασία, ένα καλό σενάριο γνωρίζει πώς να καθαρίσει μετά από αυτό.Και πάλι, η αλλαγή μεταβλητής παρακάτω δεν είναι πραγματικά απαραίτητη αν πρόκειται να εκτελέσετε μόνο τη δέσμη ενεργειών από την κονσόλα, αλλά θα την θέλετε αν σκοπεύετε να την εκτελέσετε στο ISE.

Αφαίρεση-ψευδώνυμο στοιχείου: \ g Κατάργηση μεταβλητής ScriptFolder, RequiredFiles, Επώνυμο, Αρσενικό, FirstName, NumberFormat, Prefix, Suffix, ValidInput, UserInput

Αφού το έχετε κάνει όλα, αποθηκεύστε το σενάριο με μια επέκταση ".ps1"στον ίδιο φάκελο με τα αρχεία ονομάτων σας.Βεβαιωθείτε ότι το ExecutionPolicy έχει οριστεί έτσι ώστε το σενάριο να μπορεί να τρέξει και να του δώσει μια στροβιλισμού.

Εδώ είναι ένα στιγμιότυπο οθόνης του σεναρίου σε δράση:

Μπορείτε επίσης να κατεβάσετε ένα αρχείο ZIP που περιέχει αυτό το σενάριο PowerShell και αρχεία κειμένου με λίστες ονομάτων από τον παρακάτω σύνδεσμο.

Τυχαίο όνομα &Δημιουργία τηλεφωνικού αριθμού για PowerShell