Προγραμματισμός

Go pro: Ο οδηγός χρήσης του PowerShell

Εάν έχετε παλέψει με τα Windows 10, έχετε αναμφίβολα ακούσει για το PowerShell. Εάν έχετε προσπαθήσει να κάνετε κάτι φανταχτερό με το Win7 / 8.1 πρόσφατα, το PowerShell πιθανότατα εμφανίστηκε επίσης. Μετά από χρόνια βασισμένης στη γραμμή εντολών των Windows και σε μαζικά αρχεία μαζικής ενημέρωσης, ήρθε η ώρα να θέσετε τα βλέμματά σας σε κάτι πιο ισχυρό, πιο προσαρμοστικό - καλύτερα.

Το PowerShell είναι μια τεράστια προσθήκη στην εργαλειοθήκη των Windows και μπορεί να προκαλέσει λίγο φόβο δεδομένου αυτού του τεράστιου μεγέθους. Είναι μια γλώσσα δέσμης ενεργειών, ένα κέλυφος εντολών, ένα κερί δαπέδου; Πρέπει να συνδέσετε ένα cmdlet με μια instantiated .Net τάξη για εκτέλεση με παρόχους; Και γιατί όλα τα έγγραφα υποστήριξης μιλούν για διαχειριστές — πρέπει να είμαι επαγγελματίας διαχειριστής των Windows για να το χρησιμοποιήσω;

Χαλαρώστε. Το PowerShell είναι ισχυρό, αλλά δεν πρέπει να είναι εκφοβιστικό.

Ο ακόλουθος οδηγός απευθύνεται σε όσους έχουν εκτελέσει μια εντολή Windows ή δύο ή έχουν μιμηθεί ένα αρχείο δέσμης. Θεωρήστε το βήμα-προς-βήμα μετασχηματισμό από το PowerShell περίεργο σε PowerShell ικανό.

Βήμα 1: Στρέψτε το

Το πρώτο πράγμα που θα χρειαστείτε είναι το ίδιο το PowerShell. Εάν χρησιμοποιείτε Windows 10, έχετε ήδη εγκατεστημένο το PowerShell 5 - την πιο πρόσφατη έκδοση. (Το Win10 Anniversary Update έχει 5.1, αλλά δεν θα γνωρίζετε τη διαφορά με το Fall Update 5.0.) Τα Windows 8 και 8.1 αποστέλλονται με το PowerShell 4, το οποίο είναι αρκετά καλό για να βρέξετε τα πόδια σας. Η εγκατάσταση του PowerShell στα Windows 7 δεν είναι δύσκολη, αλλά χρειάζεται περισσότερη προσοχή και πρέπει να εγκαταστήσετε το .Net Framework ξεχωριστά. Το JuanPablo Jofre περιγράφει λεπτομερώς τον τρόπο εγκατάστασης του WMF 5.0 (Windows Management Framework), το οποίο περιλαμβάνει το PowerShell, εκτός από τα εργαλεία που πιθανότατα δεν θα χρησιμοποιήσετε κατά την εκκίνηση, στο MSDN.

Το PowerShell προσφέρει δύο διεπαφές. Οι προχωρημένοι χρήστες θα αναζητήσουν το πλήρες GUI, γνωστό ως Integrated Scripting Environment (ISE). Οι αρχάριοι, ωστόσο, εξυπηρετούνται καλύτερα από το PowerShell Console, μια απλή διεπαφή κειμένου που θυμίζει τη γραμμή εντολών των Windows ή ακόμα και το DOS 3.2.

Για να ξεκινήσετε το PowerShell ως διαχειριστής από τα Windows 10, κάντε κλικ στο κουμπί Έναρξη και μετακινηθείτε προς τα κάτω στη λίστα εφαρμογών στο Windows PowerShell. Κάντε κλικ σε αυτήν τη γραμμή, κάντε δεξί κλικ στο Windows PowerShell και επιλέξτε Εκτέλεση ως διαχειριστής. Στα Windows 8.1, αναζητήστε το Windows PowerShell στο φάκελο συστήματος των Windows. Στο Win7, βρίσκεται στο φάκελο Accessories. Μπορείτε να εκτελέσετε το PowerShell ως «κανονικός» χρήστης ακολουθώντας την ίδια ακολουθία αλλά με ένα αριστερό κλικ.

Σε οποιαδήποτε έκδοση των Windows, μπορείτε να χρησιμοποιήσετε την αναζήτηση των Windows για να αναζητήσετε το PowerShell. Στα Windows 8.1 και Windows 10, μπορείτε να το βάλετε στο Ctrl-X "Power menu" (κάντε δεξί κλικ σε ένα κενό σημείο στη γραμμή εργασιών και επιλέξτε Properties, στην καρτέλα Πλοήγηση, επιλέξτε το πλαίσιο για να αντικαταστήσετε τη γραμμή εντολών). Μόλις το ανοίξετε, είναι καλή ιδέα να καρφιτσώσετε το PowerShell στη γραμμή εργασιών σας. Ναι, θα σου αρέσει πολύ.

Βήμα 2: Πληκτρολογήστε παλιομοδίτικες εντολές των Windows

Θα εκπλαγείτε με το πόσο λειτουργεί η σύνταξη της γραμμής εντολών των Windows, όπως αναμενόταν στο PowerShell.

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

Ανάλογα με τον τρόπο εκκίνησης της κονσόλας PowerShell, μπορείτε να ξεκινήσετε από c: \ Windows \ system32 ή στο c: \ Χρήστες \. Στο παράδειγμα του στιγμιότυπου οθόνης, χρησιμοποιώ cd .. (σημειώστε το κενό) για να ανεβείτε ένα επίπεδο τη φορά και, στη συνέχεια, εκτελέστε το σκηνοθέτης για να απαριθμήσετε όλα τα αρχεία και τους υποφακέλους στο ΝΤΟ:\ Ευρετήριο.

Βήμα 3: Εγκαταστήστε τα αρχεία βοήθειας

Εντολές όπως CD και σκηνοθέτης δεν είναι εγγενείς εντολές PowerShell. Είναι ψευδώνυμα - υποκατάστατα πραγματικών εντολών PowerShell. Τα ψευδώνυμα μπορεί να είναι βολικά για εμάς με μνήμη δακτύλου που είναι δύσκολο να ξεπεραστεί. Αλλά δεν αρχίζουν καν να αγγίζουν τα πιο σημαντικά μέρη του PowerShell.

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

Η βοήθεια του PowerShell μου λέει αυτό σκηνοθέτης είναι ένα ψευδώνυμο για την εντολή PowerShell Λήψη-ChildItem. Σίγουρα, αν πληκτρολογήσετε get-childitem στο PS Γ: \> προτροπή, βλέπετε ακριβώς αυτό που είδατε με το σκηνοθέτης εντολή.

Όπως σημειώνεται στο κάτω μέρος του στιγμιότυπου οθόνης, τα αρχεία βοήθειας για το PowerShell δεν εγκαθίστανται αυτόματα. Για να τα ανακτήσετε (εσείς κάνω Θέλετε να τα πάρετε), συνδεθείτε στο PowerShell σε λειτουργία διαχειριστή και, στη συνέχεια, πληκτρολογήστε ενημέρωση-βοήθεια. Η εγκατάσταση των αρχείων βοήθειας θα διαρκέσει αρκετά λεπτά και ενδέχεται να σας λείπουν μερικές ενότητες. Η εγκατάσταση της Βοήθειας για NetWNV και SecureBoot απέτυχε στο δοκιμαστικό μου μηχάνημα. Αλλά όταν τελειώσετε, το πλήρες σύστημα βοήθειας θα είναι στη διάθεσή σας.

Από εκεί και πέρα, πληκτρολογήστε ζήτα βοήθεια ακολουθείται από την εντολή ("cmdlet" στο PowerShell speak, προφέρεται "command-let") που σας αφορά και δείτε όλη τη βοήθεια για αυτό το στοιχείο. Για παράδειγμα, get-help get-childitem παράγει μια περίληψη του get-childitem επιλογές. Σας ζητά επίσης να πληκτρολογήσετε παραλλαγές στο θέμα. Έτσι, τα ακόλουθα:

get-help get-childitem-παραδείγματα

παράγει επτά λεπτομερή παραδείγματα για τον τρόπο χρήσης get-childitem. Η εντολή PowerShell

get-help get-childitem-λεπτομερείς

περιλαμβάνει αυτά τα επτά παραδείγματα, καθώς και μια λεπτομερή εξήγηση για κάθε παράμετρο που είναι διαθέσιμη για το get-childitem cmdlet.

Βήμα 4: Λάβετε βοήθεια σχετικά με τις παραμέτρους

Στο βοήθεια dir στιγμιότυπο οθόνης, ίσως έχετε παρατηρήσει ότι υπάρχουν δύο καταχωρίσεις κάτω ΣΥΝΤΑΞΗ Για get-childitem. Το γεγονός ότι υπάρχουν δύο ξεχωριστές σύνταξη για το cmdlet σημαίνει ότι υπάρχουν δύο τρόποι εκτέλεσης του cmdlet. Πώς διατηρείτε τις σύνταξη ξεχωριστές και τι σημαίνουν οι παράμετροι; Η απάντηση είναι εύκολη, αν γνωρίζετε το κόλπο.

Για να λάβετε όλες τις λεπτομέρειες σχετικά με τις παραμέτρους για το get-childitem cmdlet ή οποιοδήποτε άλλο cmdlet, χρησιμοποιήστε το -γεμάτος παράμετρος, όπως αυτή:

get-help get-childitem-πλήρης

Αυτό δημιουργεί μια λίστα από γραμμή προς γραμμή του τι μπορείτε να κάνετε με το cmdlet και τι μπορεί να συμβεί (ή όχι!). Δείτε το στιγμιότυπο οθόνης.

Κοιτάζοντας τις λεπτομέρειες της παραμέτρου, είναι αρκετά εύκολο να το δείτε get-childitem μπορεί να χρησιμοποιηθεί για την ανάκτηση "θυγατρικών" αντικειμένων (όπως τα ονόματα των υποφακέλων ή των ονομάτων αρχείων) σε μια τοποθεσία που καθορίζετε, με ή χωρίς συγκεκριμένες αντιστοιχίσεις χαρακτήρων. Για παράδειγμα:

get-childItem "* .txt" - επανάληψη

ανακτά μια λίστα όλων των "*.κείμενοΑρχεία στον τρέχοντα φάκελο και σε όλους τους υποφακέλους (λόγω του - ανάρτηση παράμετρος). Ότι τα ακόλουθα:

get-childitem "HKLM: \ Λογισμικό"

επιστρέφει μια λίστα με όλα τα κλειδιά μητρώου υψηλού επιπέδου στο HKEY_LOCAL_MACHINE \ Λογισμικό.

Εάν έχετε προσπαθήσει ποτέ να μπείτε στο μητρώο χρησιμοποιώντας μια γραμμή εντολών Windows ή ένα αρχείο δέσμης, είμαι βέβαιος ότι μπορείτε να δείτε πόσο ισχυρή πρέπει να είναι αυτή η πρόσβαση.

Βήμα 5: Καταγράψτε τα ονόματα

Υπάρχει ένας λόγος για τον οποίο τα cmdlet που έχουμε δει μέχρι τώρα φαίνονται τα ίδια: get-childitem, ενημέρωση-βοήθεια, και ζήτα βοήθεια όλοι ακολουθούν την ίδια σύμβαση ρήματος-ουσιαστικού. Ελεύθερα, όλα τα cmdlet του PowerShell χρησιμοποιούν αυτήν τη σύμβαση, με ένα ρήμα που προηγείται ενός (μοναδικού) ουσιαστικού. Εκείνοι από εσάς που περάσατε εβδομάδες αγωνιζόμενοι για ασυνεπή ονόματα VB και VBA εντολές μπορούν να αναπνέουν ανακούφιση.

Για να δείτε πού πηγαίνουμε, ρίξτε μια ματιά σε μερικά από τα πιο κοινά cmdlet (χάρη στο blog του Ed Wilson's Hey, Scripting Guy!). Ξεκινήστε με τα cmdlet που φτάνουν στο σύστημά σας και βγάλτε χρήσιμες πληροφορίες, όπως τα εξής:

  • καθορισμένη τοποθεσία: Ρυθμίζει την τρέχουσα θέση εργασίας σε μια καθορισμένη τοποθεσία
  • λήψη-περιεχόμενο: Παίρνει τα περιεχόμενα ενός αρχείου
  • λήψη-αντικείμενο: Παίρνει αρχεία και φακέλους
  • αντίγραφο-είδος: Αντιγράφει ένα αντικείμενο από τη μία τοποθεσία στην άλλη
  • αφαίρεση αντικειμένου: Διαγράφει αρχεία και φακέλους
  • διαδικασία λήψης: Παίρνει τις διαδικασίες που εκτελούνται σε έναν τοπικό ή απομακρυσμένο υπολογιστή
  • λήψη υπηρεσίας: Παρέχει τις υπηρεσίες σε τοπικό ή απομακρυσμένο υπολογιστή
  • επίκληση-webrequest: Παίρνει περιεχόμενο από μια ιστοσελίδα στο Διαδίκτυο

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

get-help copy-item-πλήρες

Με βάση την περιγραφή βοήθειας, μπορείτε εύκολα να καταλάβετε τι θέλει το cmdlet. Για παράδειγμα, εάν θέλετε να αντιγράψετε όλα τα αρχεία και τους φακέλους σας από Εγγραφα προς την c: \ temp, θα χρησιμοποιούσατε:

copy-item c: \ users \ [username] \ documents \ * c: \ temp

Καθώς πληκτρολογείτε αυτήν την εντολή, θα δείτε μερικές ωραίες πινελιές ενσωματωμένες στο περιβάλλον PowerShell. Για παράδειγμα, εάν πληκτρολογείτε αντίγραφο-i και πατήστε το πλήκτρο Tab, το PowerShell συμπληρώνει Αντίγραφο-στοιχείο και ένα διάστημα. Εάν πληκτρολογήσετε εσφαλμένα ένα cmdlet και το PowerShell δεν μπορεί να το καταλάβει, έχετε μια πολύ λεπτομερή περιγραφή του τι πήγε στραβά.

Δοκιμάστε αυτό το cmdlet. (Μπορεί να προσπαθήσετε να εγκαταστήσετε ένα πρόγραμμα για να διαβάσετε το πλαίσιο "σχετικά". Εάν ναι, αγνοήστε το.)

invoke-webrequest askwoody.com

Λαμβάνετε μια σύντομη λίστα με τις δηλώσεις περιεχομένου της ιστοσελίδας, τις κεφαλίδες, τις εικόνες, τους συνδέσμους και άλλα. Δείτε πώς λειτουργεί; Ανακοίνωση στο ζήτα βοήθεια λίστα για επίκληση-webrequest ότι η επίκληση-webrequest cmdlet "επιστρέφει συλλογές φορμών, συνδέσμων, εικόνων και άλλων σημαντικών στοιχείων HTML" - ακριβώς αυτό που πρέπει να βλέπετε στην οθόνη σας.

Ορισμένα cmdlets σας βοηθούν να ελέγχετε ή να χρησιμοποιείτε το PowerShell:

  • λήψη-εντολή: Εμφανίζει όλα τα διαθέσιμα cmdlet (είναι μια μεγάλη λίστα!)
  • get-ρήμα: Παραθέτει όλα τα διαθέσιμα ρήματα (τα αριστερά μισά cmdlet)
  • καθαρός-οικοδεσπότης: Διαγράφει την οθόνη στο κεντρικό πρόγραμμα

Διάφορες παράμετροι (θυμηθείτε, ζήτα βοήθεια) σας επιτρέπουν να μειώσετε τις εντολές και να περιορίσετε τις επιλογές που μπορεί να σας βοηθήσουν. Για παράδειγμα, για να δείτε μια λίστα με όλα τα cmdlet που λειτουργούν με υπηρεσίες Windows, δοκιμάστε το:

get-command *-υπηρεσία

Παραθέτει όλα τα ρήματα που είναι διαθέσιμα υπηρεσία ως το ουσιαστικό. Εδώ είναι το αποτέλεσμα:

Λήψη υπηρεσίας

Νέα υπηρεσία

Επανεκκίνηση υπηρεσίας

Συνέχιση-Υπηρεσία

Σετ-Υπηρεσία

Έναρξη-Υπηρεσία

Διακοπή υπηρεσίας

Αναστολή υπηρεσίας

Μπορείτε να συνδυάσετε αυτά τα cmdlets με άλλα cmdlet για να σκάψετε σχεδόν σε οποιοδήποτε μέρος του PowerShell. Εκεί μπαίνουν οι σωλήνες στην εικόνα.

Βήμα 6: Φέρτε τους σωλήνες

Εάν έχετε χρησιμοποιήσει ποτέ τη γραμμή εντολών των Windows ή κάνατε ένα αρχείο δέσμης, γνωρίζετε για ανακατεύθυνση και σωληνώσεις. Με απλούς όρους, και οι δύο ανακατεύθυνση (το> χαρακτήρα) και σωλήνες (το | χαρακτήρα) πάρτε την έξοδο από μια ενέργεια και κολλήστε την κάπου αλλού. Μπορείτε, για παράδειγμα, να ανακατευθύνετε την έξοδο του a σκηνοθέτης εντολή σε ένα αρχείο κειμένου, ή "διοχέτευση" το αποτέλεσμα ενός πινγκ εντολή σε ένα εύρημα, για να φιλτράρετε ενδιαφέροντα αποτελέσματα, όπως:

dir> temp.txt

ping askwoody.com | βρείτε "πακέτα"> temp2.txt

Στη δεύτερη εντολή παραπάνω, το εύρημα Η εντολή αναζητά τη συμβολοσειρά πακέτα στην σωληνωμένη έξοδο ενός askwoody.com πινγκ και κολλάει όλες τις γραμμές που ταιριάζουν σε ένα αρχείο που ονομάζεται temp2.txt.

Ίσως εκπληκτικά, η πρώτη από αυτές τις εντολές λειτουργεί καλά στο PowerShell. Για να εκτελέσετε τη δεύτερη εντολή, θέλετε κάτι τέτοιο:

ping askwoody.com | πακέτα επιλογής συμβολοσειράς | out-file temp2.txt

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

Το PowerShell έχει δυνατότητα σωληνώσεων, αλλά δεν περιορίζεται στο κείμενο. Αντ 'αυτού, το PowerShell σάς επιτρέπει να περάσετε ένα ολόκληρο αντικείμενο από το ένα cmdlet στο άλλο, όπου ένα "αντικείμενο" είναι ένας συνδυασμός δεδομένων (ονομάζονται ιδιότητες) και των ενεργειών (μεθόδων) που μπορούν να χρησιμοποιηθούν στα δεδομένα.

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

Πώς να το καταλάβω; Καλωσήρθατε στον-η-ο πάρτε μέλος cmdlet. Εάν θέλετε να μάθετε τι είδους αντικείμενο παράγει ένα cmdlet, περάστε το πάρει μέλος. Για παράδειγμα, εάν προσπαθείτε να καταλάβετε τις διαδικασίες που εκτελούνται στον υπολογιστή σας και έχετε περιορίσει τις επιλογές στο λήψη-διαδικασία cmdlet, δείτε πώς μπορείτε να μάθετε τι διαδικασία λήψης Το cmdlet παράγει:

διαδικασία λήψης | πάρει μέλος

Η εκτέλεση αυτής της εντολής δημιουργεί μια μεγάλη λίστα ιδιοτήτων και μεθόδων για λήψη-διαδικασία, αλλά στην αρχή της λίστας μπορείτε να δείτε τον τύπο του αντικειμένου που διαδικασία λήψης δημιουργεί:

TypeName: System.Diagnostics.Process

Το παρακάτω στιγμιότυπο οθόνης σας λέει επίσης αυτό λήψη-διαδικασία έχει ιδιότητες που ονομάζονται Λαβές, Ονομα, NPM, ΜΕΤΑ ΜΕΣΗΜΒΡΙΑΣ, ΣΙ, VM, και WS.

Εάν θέλετε να χειριστείτε την έξοδο του διαδικασία λήψης ώστε να μπορείτε να εργαστείτε με αυτό (σε αντίθεση με το να εμφανίζει μια μεγάλη λίστα ενεργών διαδικασιών στην οθόνη), πρέπει να βρείτε ένα άλλο cmdlet που θα λειτουργεί με System.Diagnostics.Process ως είσοδος. Για να βρείτε ένα πρόθυμο cmdlet, απλά χρησιμοποιείτε… περιμένετε… PowerShell:

get-command -Parametertype System.Diagnostics.Process

Αυτό παράγει μια λίστα με όλα τα cmdlet που μπορούν να χειριστούν System.Diagnostics.Process.

Μερικά cmdlet είναι γνωστά για τη λήψη σχεδόν κάθε είδους εισαγωγής. Επικεφαλής ανάμεσά τους: πού-αντικείμενο. Ίσως συγχέοντας, πού-αντικείμενο βγαίνει σε κάθε στοιχείο που αποστέλλεται στον αγωγό, ένα προς ένα, και εφαρμόζει τα κριτήρια επιλογής που ζητάτε. Υπάρχει ένας ειδικός δείκτης που ονομάζεται $_. που σας επιτρέπει να διαπερνάτε κάθε στοιχείο του σωλήνα, ένα κάθε φορά.

Ας υποθέσουμε ότι θέλετε να βρείτε μια λίστα με όλες τις διαδικασίες που εκτελούνται στο μηχάνημά σας που ονομάζονται "svchost"- Σε PowerShell μιλήστε, θέλετε να ταιριάξετε σε ένα Ονομα Ιδιοκτησία τουsvchost. Δοκιμάστε αυτήν την εντολή PowerShell:

διαδικασία λήψης | Where-object {$ _. Όνομα -eq "svchost"}

ο πού-αντικείμενο Το cmdlet κοιτάζει το καθένα System.Diagnostics.Process στοιχείο, συγκρίνει το .Ονομα αυτού του αντικειμένου στο "svchost"; αν το αντικείμενο ταιριάζει, χτυπάει το άκρο του σωλήνα και πληκτρολογείται στην οθόνη σας. Δείτε το στιγμιότυπο οθόνης.