Πώς να δημιουργήσετε τυχαία ονόματα και αριθμούς τηλεφώνου με 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 θα πρέπει να περιέχει τα αρσενικά πρώτα ονόματα στα οποία θέλετε να επιλέξετε το σενάριο. Παράδειγμα:
Τζέιμς Γιάννης Robert Michael Michael
Females.txt θα πρέπει να περιέχει τα γυναικεία ονόματα στα οποία θέλετε να επιλέξετε το σενάριο. Παράδειγμα:
Μαρία Πατρικία Λίντα Μπάρμπαρα Ελισάβετ
Κανόνες για τους αριθμούς τηλεφώνου
Αν θέλετε να είστε σίγουροι ότι οι αριθμοί τηλεφώνου σας δεν ταιριάζουν με τον πραγματικό αριθμό τηλεφώνου, ο ευκολότερος τρόπος είναι να χρησιμοποιήσετε τον γνωστό "555" Exchange Code. Αλλά αν πρόκειται να παρουσιάσετε ένα σύνολο δεδομένων με πολλούς αριθμούς τηλεφώνου, το 555 θα αρχίσει να φαίνεται αρκετά μονότονο πραγματικά γρήγορα. Για να κάνουμε τα πράγματα πιο ενδιαφέροντα, θα δημιουργήσουμε άλλους αριθμούς τηλεφώνου που παραβιάζουν τους κανόνες του NAPP (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.
- Λήψη περιεχομένου κάνει αυτό που λέει στο κασσίτερο. Λαμβάνει τα περιεχόμενα ενός συγκεκριμένου αντικειμένου - συνήθως ένα αρχείο. Αυτό μπορεί να χρησιμοποιηθεί για την εμφάνιση των περιεχομένων ενός αρχείου κειμένου στην κονσόλα ή, όπως και σε αυτή τη δέσμη ενεργειών, να περάσει το περιεχόμενο κατά μήκος του αγωγού που θα χρησιμοποιηθεί με άλλες εντολές.
- Γράψτε-Host βάζει πράγματα στην κονσόλα. Αυτό χρησιμοποιείται για την παρουσίαση μηνυμάτων στον χρήστη και δεν περιλαμβάνεται στην έξοδο της δέσμης ενεργειών εάν η έξοδος γίνεται ανακατευθυνόμενη.
- Έξοδος εγγραφής παράγει πραγματικά αποτελέσματα. Κανονικά, αυτό είναι αποτυχημένο στην κονσόλα, αλλά μπορεί επίσης να ανακατευθυνθεί από άλλες εντολές.
Υπάρχουν και άλλες εντολές στο σενάριο, αλλά θα τις εξηγήσουμε καθώς πηγαίνουμε.
Δημιουργία του σεναρίου
Τώρα ήρθε η ώρα να βγάλουμε τα χέρια μας βρώμικα.
Μέρος 1: Να πάρει έτοιμο να πάει
Εάν σας αρέσει το σενάριό σας να ξεκινάει από μια καθαρή κονσόλα, εδώ είναι η πρώτη γραμμή που θέλετε σε αυτό.
Clear-Host
Τώρα που έχουμε μια καθαρή οθόνη, το επόμενο πράγμα που θέλουμε να κάνουμε είναι να ελέγξουμε τη δέσμη ενεργειών για να βεβαιωθούμε ότι όλα όσα χρειάζεται είναι στη θέση του. Για να γίνει αυτό, πρέπει να αρχίσουμε λέγοντάς μας από πού να κοιτάξουμε και τι να αναζητήσουμε.
$ ScriptFolder = Διαχωρισμός-Διαδρομή $ MyInvocation.MyCommand.Definition -Παιχνίδι $ RequiredFiles = ('Males.txt', 'Females.txt', 'Surnames.txt')
Η πρώτη γραμμή είναι πολύ χρήσιμη για κάθε σενάριο. Ορίζει μια μεταβλητή που δείχνει τον φάκελο που περιέχει το σενάριο. Αυτό είναι απαραίτητο εάν το σενάριο σας χρειάζεται άλλα αρχεία που βρίσκονται στον ίδιο κατάλογο με τον ίδιο τον κατάλογο (ή μια γνωστή σχετική διαδρομή από αυτόν τον κατάλογο), επειδή διαφορετικά θα αντιμετωπίσετε σφάλματα αν και όταν προσπαθείτε να εκτελέσετε το σενάριο ενώ βρίσκεστε σε άλλο εργασίας.
Η δεύτερη γραμμή δημιουργεί μια σειρά από ονόματα αρχείων που απαιτούνται για τη σωστή εκτέλεση του σεναρίου. Θα χρησιμοποιήσουμε αυτό, μαζί με τη μεταβλητή $ ScriptFolder, στο επόμενο κομμάτι όπου ελέγξουμε για να βεβαιωθούμε ότι υπάρχουν αυτά τα αρχεία.
$ RequiredFiles | ForEach-Object αν (! (Test-Path "$ ScriptFolder \ $ _")) Γράψτε-Host "$ _ δεν βρέθηκε". -Περισσότερα χρώματα Κόκκινο $ MissingFiles ++
Αυτό το κομμάτι δέσμης ενεργειών στέλνει τον πίνακα $ RequiredFiles σε ένα μπλοκ ForEach-Object. Μέσα σε αυτό το μπλοκ δέσμης ενεργειών, η εντολή if χρησιμοποιεί Test-Path για να δει αν το αρχείο που ψάχνουμε είναι εκεί όπου ανήκει. Το Test-Path είναι μια απλή εντολή που, όταν δίνεται μια διαδρομή αρχείου, επιστρέφει μια βασική αληθινή ή ψευδή απάντηση για να μας πει αν η διαδρομή δείχνει σε κάτι που υπάρχει. Το θαυμαστικό εκεί είναι α δεν που αντιστρέφει την απόκριση του διαδρομής δοκιμής πριν την μεταβιβάσει στη δήλωση if. Αν λοιπόν το Test-Path επιστρέψει ψευδές (δηλαδή, το αρχείο που ψάχνουμε δεν υπάρχει), θα μετατραπεί σε true έτσι ώστε η εντολή if να εκτελέσει το block script.
Ένα άλλο πράγμα που πρέπει να σημειωθεί εδώ, το οποίο θα χρησιμοποιείται συχνά σε αυτό το σενάριο, είναι η χρήση διπλών εισαγωγικών αντί για μονό-εισαγωγικά. Όταν βάζετε κάτι σε ενιαία εισαγωγικά, το PowerShell το αντιμετωπίζει ως στατική συμβολοσειρά. Οποιοσδήποτε υπάρχει στα μοναδικά αποσπάσματα θα περάσει ακριβώς όπως είναι. Τα διπλά εισαγωγικά λέει στο PowerShell να μεταφράσει τις μεταβλητές και κάποια άλλα ειδικά στοιχεία μέσα στην συμβολοσειρά πριν το περάσουν. Εδώ, τα διπλά εισαγωγικά σημαίνουν ότι αντί να τρέχουν Δοκιμαστική διαδρομή '$ ScriptFolder \ $ _' θα κάνουμε πραγματικά κάτι περισσότερο Test-Path 'C: \ Scripts \ Surnames.txt' (υποθέτοντας ότι το σενάριό σας είναι σε C: \ Scripts και το ForEach-Object εργάζεται επί του παρόντος στο 'Surnames.txt').
Για κάθε αρχείο που δεν βρέθηκε, το Write-Host θα δημοσιεύσει ένα μήνυμα σφάλματος με κόκκινο χρώμα για να σας πει ποιο αρχείο λείπει. Στη συνέχεια, αυξάνει τη μεταβλητή $ MissingFiles που θα χρησιμοποιηθεί στο επόμενο κομμάτι, για σφάλμα και θα τερματιστεί αν λείπουν τα αρχεία.
εάν ($ MissingFiles) Write-Host "Δεν ήταν δυνατή η εύρεση αρχείων προέλευσης $ MissingFiles. -Περισσότερα χρώματα Κόκκινο Αφαιρέστε-Μεταβλητό αρχείο δέσμης ενεργειών, Απαιτούμενα αρχεία, Έλλειψη φακέλων Έξοδος
Εδώ είναι ένα άλλο τακτοποιημένο τέχνασμα που μπορείτε να κάνετε εάν δηλώσεις. Οι περισσότεροι οδηγοί θα δείτε εάν οι δηλώσεις θα σας ενημερώσουν για να χρησιμοποιήσετε έναν χειριστή για να ελέγξετε την αντίστοιχη συνθήκη. Για παράδειγμα, εδώ θα μπορούσαμε να χρησιμοποιήσουμε αν ($ MissingFiles -gt 0) για να δείτε αν $ MissingFiles είναι μεγαλύτερο από το μηδέν. Ωστόσο, αν χρησιμοποιείτε ήδη εντολές που επιστρέφουν μια τιμή boolean (όπως στο προηγούμενο μπλοκ όπου χρησιμοποιούσαμε το Test-Path), αυτό δεν είναι απαραίτητο. Μπορείτε επίσης να το κάνετε χωρίς αυτό σε περιπτώσεις όπως αυτό, όταν δοκιμάζετε μόνο για να διαπιστώσετε εάν ένας αριθμός είναι μηδενικός. Οποιοσδήποτε μη μηδενικός αριθμός (θετικός ή αρνητικός) αντιμετωπίζεται ως αληθής, ενώ μηδέν (ή, όπως συμβαίνει εδώ, ανύπαρκτη μεταβλητή) θα θεωρηθεί ψευδής.
Εάν το $ MissingFiles υπάρχει και είναι μηδενικό, το Write-Host θα δημοσιεύσει ένα μήνυμα που σας λέει πόσα αρχεία λείπουν και ότι το σενάριο θα ακυρωθεί. Στη συνέχεια, το Remove-Variable θα καθαρίσει όλες τις μεταβλητές που έχουμε δημιουργήσει και το Exit θα τερματίσει τη δέσμη ενεργειών. Στην κανονική κονσόλα PowerShell, το Remove-Variable δεν είναι πραγματικά απαραίτητο για αυτό το συγκεκριμένο σκοπό, επειδή οι μεταβλητές που ορίζονται από δέσμες ενεργειών συνήθως απορρίπτονται όταν εξέρχεται το σενάριο. Ωστόσο, το PowerShell ISE συμπεριφέρεται λίγο διαφορετικά, επομένως μπορεί να θέλετε να το κρατήσετε αν σκοπεύετε να εκτελέσετε το σενάριο από εκεί.
Εάν όλα τα πράγματα είναι καλά, το σενάριο θα συνεχιστεί. Μια ακόμη προετοιμασία για να γίνει είναι ένα ψευδώνυμο ότι θα χαρούμε πολύ να έχουμε αργότερα.
Νέα-Alias g Get-Random
Τα ψευδώνυμα χρησιμοποιούνται για τη δημιουργία εναλλακτικών ονομάτων για τις εντολές. Αυτά μπορεί να είναι χρήσιμα για να μας βοηθήσουν να γνωρίσουμε τη νέα διεπαφή (π.χ.: Το PowerShell έχει ενσωματωμένα ψευδώνυμα όπως dir -> Get-ChildItem και cat -> Λήψη περιεχομένου) ή για να κάνετε αναφορές μικρών διαστάσεων για κοινώς χρησιμοποιούμενες εντολές. Εδώ, κάνουμε ένα πολύ παραπομπή για το Get-Random εντολή η οποία πρόκειται να χρησιμοποιηθεί πολύ αργότερα.
Get-Random κάνει σχεδόν ό, τι υπονοεί το όνομά του. Δεδομένου ότι ένας πίνακας (όπως μια λίστα ονομάτων) ως είσοδος, επιλέγει ένα τυχαίο στοιχείο από τον πίνακα και το εκτοξεύει. Μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία τυχαίων αριθμών. Το πράγμα που πρέπει να θυμάστε για το Get-Random και οι αριθμοί όμως είναι ότι, όπως και πολλές άλλες λειτουργίες υπολογιστών, αρχίζει να μετρά από το μηδέν. Έτσι αντί για Get-Random 10 που σημαίνει το πιο φυσικό "δώσε μου έναν αριθμό από το 1 έως το 10" σημαίνει πραγματικά "δώσε μου έναν αριθμό από το 0 έως το 9." Μπορείτε να είστε πιο συγκεκριμένοι για την επιλογή αριθμού, έτσι ώστε το Get-Random να συμπεριφέρεται περισσότερο σαν να είχα φυσικά αναμένω, αλλά δεν θα χρειαστεί αυτό σε αυτό το σενάριο.
Μέρος 2: Εισαγωγή χρηστών και έναρξη εργασίας
Ενώ ένα σενάριο που παράγει μόνο ένα τυχαίο όνομα & αριθμό τηλεφώνου είναι εξαιρετικό, είναι πολύ καλύτερα αν το σενάριο επιτρέπει στο χρήστη να καθορίσει πόσα ονόματα και αριθμούς θέλουν να πάρουν σε μια παρτίδα. Δυστυχώς, δεν μπορούμε πραγματικά να εμπιστευόμαστε τους χρήστες να δίνουν πάντα έγκυρες πληροφορίες. Έτσι, υπάρχει ένα μικρό κομμάτι περισσότερο σε αυτό από μόνο $ UserInput = Read-Host.
ενώ (! $ ValidInput) δοκιμάστε [int] $ UserInput = Ανάγνωση-Host-Προώθηση 'Στοιχεία που θα δημιουργηθούν' $ ValidInput = $ true catch Write-Host ' Εισαγάγετε μόνο έναν αριθμό. ' -Περισσόχρωμο Κόκκινο Κόκκινο
Η εντολή while ελέγχει και ακυρώνει την τιμή του $ ValidInput. Εφόσον το $ ValidInput είναι ψευδές ή δεν υπάρχει, θα παραμείνει βρόχο μέσω του μπλοκ δέσμης ενεργειών.
Η εντολή try παίρνει την είσοδο του χρήστη, μέσω του Read-Host και προσπαθεί να την μετατρέψει σε μια ακέραια τιμή. (Αυτό είναι το [int] πριν Read-Host.) Εάν είναι επιτυχής, θα ορίσει $ ValidInput σε αληθές, έτσι ώστε ο βρόχος while μπορεί να βγει. Αν δεν είναι επιτυχής, το μπλοκ αλίευσης παρουσιάζει ένα σφάλμα και, επειδή το $ ValidInput δεν έχει οριστεί, ο βρόχος while θα επιστρέψει και θα προτρέψει ξανά τον χρήστη.
Μόλις ο χρήστης δώσει σωστά έναν αριθμό ως είσοδο, θέλουμε το σενάριο να ανακοινώσει ότι πρόκειται να αρχίσει να κάνει την εργασία του και στη συνέχεια να το κάνει.
Write-Host "'nΕνεργοποίηση $ UserInput ονόματα και αριθμοί τηλεφώνου. Παρακαλώ να είστε υπομονετικοί.'n" 1 ... $ UserInput | ForEach-Object
Μην ανησυχείτε, δεν πρόκειται να σας αφήσουμε μόνοι σας για να μάθετε τον κώδικα γεννήτριας τυχαίων αριθμών και αριθμών. Αυτό είναι μόνο ένα σχόλιο κράτησης θέσης για να σας δείξει πού θα χωρέσει το επόμενο τμήμα (όπου γίνεται η πραγματική δουλειά).
Η γραμμή Write-Host είναι αρκετά απλή. Απλώς λέει πόσα ονόματα και αριθμούς τηλεφώνου πρόκειται να δημιουργήσει το σενάριο και ζητά από τον χρήστη να είναι υπομονετικός ενώ το σενάριο κάνει τη δουλειά του. ο'n στην αρχή και στο τέλος της συμβολοσειράς πρέπει να εισαγάγετε μια κενή γραμμή πριν και μετά από αυτή την έξοδο, ακριβώς για να της δώσετε κάποιο οπτικό χωρισμό μεταξύ της γραμμής εισόδου και της λίστας ονομάτων και αριθμών. Να γνωρίζετε ότι αυτό είναι ένα back-tick (AKA "σοβαρή προφορά" - συνήθως το πλήκτρο πάνω από την καρτέλα, στα αριστερά του 1) και όχι ένα απόστροφο ή ένα ενιαίο απόσπασμα μπροστά σε κάθε n.
Το επόμενο τμήμα δείχνει έναν διαφορετικό τρόπο που μπορείτε να χρησιμοποιήσετε έναν βρόχο ForEach-Object. Συνήθως, όταν θέλετε ένα μπλοκ δέσμης ενεργειών να εκτελείται ορισμένο αριθμό φορές, θα ρυθμίσετε ένα κανονικό βρόχο όπως για το ($ x = 1; $ x -le $ UserInput; $ x ++) . Το ForEach-Object μας επιτρέπει να το απλοποιήσουμε δίνοντάς του μια λίστα με ακέραιους αριθμούς και, αντί να το πούμε να κάνει πραγματικά τίποτα με αυτούς τους ακέραιους, δίνουμε απλώς ένα στατικό μπλοκ δέσμης ενεργειών για να τρέξει μέχρι να εξαντληθούν οι ακεραίοι για να το κάνουν για.
Μέρος 3: Δημιουργία τυχαίου ονόματος
Η δημιουργία του ονόματος είναι το απλούστερο κομμάτι της υπόλοιπης διαδικασίας. Αποτελείται μόνο από τρία βήματα: Επιλέγοντας ένα επώνυμο, επιλέγοντας ένα φύλο και επιλέγοντας ένα όνομα. Θυμηθείτε αυτό το ψευδώνυμο που κάναμε για το Get-Random για λίγο πίσω; Ώρα να αρχίσετε να το χρησιμοποιείτε.
$ Surname = Λήψη περιεχομένου "$ ScriptFolder \ Surnames.txt" | g $ Αρσενικό = g 2 αν ($ Αρσενικό) $ FirstName = Λήψη περιεχομένου "$ ScriptFolder \ Males.txt" | g αλλού $ FirstName = Λήψη περιεχομένου "$ ScriptFolder \ Females.txt" | σολ
Η πρώτη γραμμή παίρνει τη λίστα με τα επώνυμα, την τροφοδοτεί στον τυχαίο επιλογέα και αναθέτει το επιλεγμένο όνομα σε $ Επώνυμο.
Η δεύτερη γραμμή επιλέγει το φύλο του ατόμου μας. Θυμηθείτε πως η Get-Random αρχίζει από το μηδέν και πως το μηδέν είναι ψευδές και ότι όλα τα άλλα είναι αληθινά; Αυτός είναι ο τρόπος που χρησιμοποιούμε Get-Random 2 (ή το πολύ μικρότερο g 2 χάρη στο ψευδώνυμό μας - και οι δύο έχουν ως αποτέλεσμα την επιλογή μεταξύ μηδέν ή ενός) για να αποφασίσουμε αν το άτομό μας είναι αρσενικό ή όχι. Στη συνέχεια, η δήλωση if / else επιλέγει τυχαία ένα αρσενικό ή θηλυκό όνομα ανάλογα.
Μέρος 4: Δημιουργία τυχαίου αριθμού τηλεφώνου
Εδώ είναι το πραγματικά διασκεδαστικό μέρος. Νωρίτερα, σας παρουσιάσαμε πώς υπάρχουν διάφοροι τρόποι να κάνετε έναν άκυρο ή πλασματικό αριθμό τηλεφώνου. Δεδομένου ότι δεν θέλουμε όλοι οι αριθμοί μας να φαίνονται πολύ παρόμοιοι μεταξύ τους, θα επιλέξουμε τυχαία μια μη έγκυρη μορφή αριθμών κάθε φορά. Οι τυχαία επιλεγμένες μορφές θα οριστούν από τον Κωδικό Περιοχής τους και τον Κώδικα Exchange, ο οποίος συλλογικά θα αποθηκευτεί ως $ Prefix.
$ NumberFormat = g 5 διακόπτης ($ NumberFormat) 0 $ Prefix = "($ (g 2) $ (g 10) $ (g 10)) $ (g 10) 1 $ Prefix = "($ (g 10) 9 $ (g 10)) $ (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)
Η πρώτη γραμμή είναι μια απλή παραγωγή τυχαίων αριθμών για να επιλέξετε ποια μορφή θα ακολουθήσουμε για τον αριθμό τηλεφώνου. Στη συνέχεια, η εντολή διακόπτη παίρνει αυτή την τυχαία επιλογή και παράγει ένα πρόθεμα $ αντίστοιχα. Να θυμάστε ότι η λίστα των τύπων μη έγκυρων αριθμών τηλεφώνου; Οι τιμές $ NumberFormat 0-3 αντιστοιχούν στα πρώτα τέσσερα σε αυτή τη λίστα. Η τιμή 4 μπορεί να δημιουργήσει μία από τις δύο τελευταίες, καθώς και οι δύο χρησιμοποιούν τον "555" Exchange Code.
Εδώ, μπορείτε επίσης να δείτε ότι χρησιμοποιούμε ένα άλλο τέχνασμα με διπλά εισαγωγικά. Τα διπλά εισαγωγικά δεν σας αφήνουν να ερμηνεύσετε τις μεταβλητές πριν από την έξοδο μιας συμβολοσειράς - σας επιτρέπουν επίσης να επεξεργαστείτε μπλοκ δέσμης ενεργειών. Για να το κάνετε αυτό, τυλίγετε το μπλοκ δέσμης ενεργειών ως εξής: "$ ()". Έτσι, αυτό που έχετε παραπάνω είναι πολλά ατομικά τυχαία ψηφία, με μερικά από αυτά είτε περιορισμένα στην εμβέλειά τους είτε στατικά, σύμφωνα με τους κανόνες που πρέπει να ακολουθήσουμε. Κάθε συμβολοσειρά έχει επίσης παρένθεση και απόσταση, όπως κανονικά περιμένατε να βλέπετε σε ένα ζεύγος Κώδικα Περιοχής και Κώδικα Exchange.
Το τελευταίο πράγμα που πρέπει να κάνουμε πριν είμαστε έτοιμοι να βγάλουμε το όνομα και τον αριθμό τηλεφώνου μας είναι να δημιουργήσουμε ένα αναγνωριστικό συνδρομητή, το οποίο θα αποθηκευτεί ως $ Suffix.
($ 10) $ ($ 10) 4 διακόπτης ($ Prefix) '(($) 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 Κατάργηση μεταβλητής δέσμης ενεργειών δέσμης ενεργειών, Απαιτούμενα αρχεία, Επώνυμο, Αρσενικό, Πρώτο όνομα, Αριθμητικό σχήμα, Πρόθεμα, Πρόσθεση, ValidInput, UserInput
Αφού τα έχετε κάνει όλα, αποθηκεύστε τη δέσμη ενεργειών με μια επέκταση ".ps1" στον ίδιο φάκελο με τα αρχεία ονομάτων σας. Βεβαιωθείτε ότι το ExecutionPolicy έχει οριστεί έτσι ώστε το σενάριο να μπορεί να τρέξει και να του δώσει μια στροβιλισμού.
Ακολουθεί ένα στιγμιότυπο οθόνης του σεναρίου σε δράση:
Μπορείτε επίσης να κατεβάσετε ένα αρχείο ZIP που περιέχει αυτή τη δέσμη ενεργειών PowerShell και αρχεία κειμένου με λίστες ονομάτων από τον παρακάτω σύνδεσμο.
Τυχαία ονομασία και γεννήτρια τηλεφώνου για το PowerShell