Geek Σχολική μορφοποίηση, φιλτράρισμα και σύγκριση σε PowerShell
Σε αυτή την έκδοση του Geek School, εξετάζουμε τη μορφοποίηση, το φιλτράρισμα και τη σύγκριση αντικειμένων στον αγωγό.
Βεβαιωθείτε ότι έχετε διαβάσει τα προηγούμενα άρθρα της σειράς:
- Μάθετε πώς να αυτοματοποιήσετε τα Windows με το PowerShell
- Μάθηση χρήσης Cmdlets στο PowerShell
- Πώς να χρησιμοποιήσετε αντικείμενα στο PowerShell
Και μείνετε συντονισμένοι για όλη την εβδομάδα.
Προεπιλεγμένη μορφοποίηση
Όταν ξεκίνησα με το PowerShell, σκέφτηκα ότι όλα ήταν μαγικά, αλλά η αλήθεια είναι ότι χρειάζεται λίγο χρόνο για να καταλάβουμε τι συμβαίνει κάτω από την κουκούλα. Το ίδιο ισχύει και για το σύστημα μορφοποίησης PowerShell. Στην πραγματικότητα, εάν εκτελείτε το cmdlet Get-Service, η παραγόμενη παραγωγή εμφανίζει μόνο 3 ιδιότητες: Status, Name and DisplayName.
Αλλά εάν διοχετεύσετε το Get-Service στο Get-Member, βλέπετε ότι τα αντικείμενα ServiceController έχουν πολύ περισσότερα από αυτά τα τρία ακίνητα, οπότε τι συμβαίνει?
Η απάντηση βρίσκεται μέσα σε ένα κρυφό αρχείο που καθορίζει τον τρόπο με τον οποίο τα περισσότερα ενσωματωμένα cmdlet εμφανίζουν την έξοδο τους. Για να πάρετε μια κατανόηση, πληκτρολογήστε τα ακόλουθα στο κέλυφος και πατήστε Enter.
σημειωματάριο C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Αν χρησιμοποιήσουμε τη λειτουργία αναζήτησης του σημειωματάριου, μπορούμε γρήγορα να μεταβούμε στην ενότητα που περιγράφει λεπτομερώς την έξοδο του cmdlet Get-Service με αναζήτηση του τύπου ServiceController.
Ξαφνικά, μπορείτε να δείτε ότι κάτω από την κουκούλα PowerShell μορφοποιούν οποιαδήποτε αντικείμενα στον αγωγό που είναι τύπου ServiceController και δημιουργούν έναν πίνακα με τρεις στήλες: Status, Name και DisplayName. Αλλά τι γίνεται αν ο τύπος που ασχολείστε δεν έχει μια καταχώρηση σε αυτό το αρχείο ή οποιοδήποτε άλλο αρχείο μορφής για αυτό το θέμα; Λοιπόν, είναι πραγματικά απλό. Εάν το αντικείμενο που βγαίνει από τον αγωγό έχει 5 ή περισσότερες ιδιότητες, το PowerShell εμφανίζει όλες τις ιδιότητες του αντικειμένου σε μια λίστα. εάν έχει λιγότερες από 5 ιδιότητες, τις εμφανίζει σε έναν πίνακα.
Διαμόρφωση των δεδομένων σας
Εάν δεν είστε ευχαριστημένοι με την προεπιλεγμένη μορφοποίηση ενός αντικειμένου ή τύπου, μπορείτε να μετακινήσετε τη δική σας μορφοποίηση. Υπάρχουν τρία cmdlets που πρέπει να ξέρετε για να το κάνετε αυτό.
- Λίστα μορφοποίησης
- Πίνακας μορφοποίησης
- Μορφοποίηση ευρείας διάταξης
Μορφοποίηση ευρείας διάταξης παίρνει απλά μια συλλογή αντικειμένων και εμφανίζει μία μόνο ιδιότητα κάθε αντικειμένου. Από προεπιλογή, θα αναζητήσει μια ιδιότητα ονόματος. αν τα αντικείμενά σας δεν περιέχουν ιδιότητα ονόματος, θα χρησιμοποιήσει την πρώτη ιδιότητα του αντικειμένου αφού οι ιδιότητες έχουν ταξινομηθεί αλφαβητικά.
Get-Service | Μορφοποίηση ευρείας διάταξης
Όπως μπορείτε να δείτε, είναι επίσης προεπιλεγμένες σε δύο στήλες, παρόλο που μπορείτε να καθορίσετε τόσο την ιδιότητα που θέλετε να χρησιμοποιήσετε όσο και πόσες στήλες θέλετε να εμφανίζονται.
Get-Service | Μορφή-ευρεία-ιδιότητα DisplayName-στήλη 6
Αν κάτι έχει διαμορφωθεί ως πίνακας από προεπιλογή, μπορείτε πάντα να το αλλάξετε σε προβολή λίστας χρησιμοποιώντας το cmdlet Format-List. Ας ρίξουμε μια ματιά στην έξοδο του cmdlet Get-Process.
Αυτή η προβολή σε πίνακες ταιριάζει πολύ καλά σε αυτό το είδος πληροφοριών, αλλά ας υποκρινόμαστε ότι θέλουμε να την δούμε σε μορφή λίστας. Το μόνο που πρέπει να κάνουμε είναι να το διοχετεύσουμε Λίστα μορφοποίησης.
Get-Process | Λίστα μορφοποίησης
Όπως μπορείτε να δείτε, υπάρχουν μόνο τέσσερα στοιχεία που εμφανίζονται στη λίστα από προεπιλογή. Για να δείτε όλες τις ιδιότητες του αντικειμένου, μπορείτε να χρησιμοποιήσετε ένα χαρακτήρα μπαλαντέρ.
Get-Process | Μορφή-λίστα-ιδιότητα *
Εναλλακτικά, μπορείτε να επιλέξετε μόνο τις ιδιότητες που θέλετε.
Get-Process | Λίστα μορφοτύπων - Όνομα ιδιότητας, id
Πίνακας μορφοποίησης, από την άλλη πλευρά, παίρνει δεδομένα και τα μετατρέπει σε τραπέζι. Δεδομένου ότι τα δεδομένα μας από την Get-Process έχουν ήδη τη μορφή πίνακα, μπορούμε να τα χρησιμοποιήσουμε για να επιλέγουμε εύκολα ιδιότητες που επιθυμούμε να εμφανίζονται στον πίνακα. Χρησιμοποιούσα την παράμετρο AutoSize για να προσαρμόσω όλα τα δεδομένα σε μια ενιαία οθόνη.
Get-Process | Όνομα μορφοποίησης-πίνακα, id -AutoSize
Φιλτράρισμα και σύγκριση
Ένα από τα καλύτερα πράγματα για τη χρήση ενός αγωγού με βάση τα αντικείμενα είναι ότι μπορείτε να φιλτράρετε αντικείμενα από τον αγωγό σε οποιοδήποτε στάδιο χρησιμοποιώντας το cmdlet Where-Object.
Get-Service | Όπου-Αντικείμενο $ _. Κατάσταση -eq "Εκτέλεση"
Χρησιμοποιώντας όπου το αντικείμενο είναι πραγματικά πολύ απλό. Το $ _ αντιπροσωπεύει το τρέχον αντικείμενο αγωγού, από το οποίο μπορείτε να επιλέξετε μια ιδιότητα που θέλετε να φιλτράρετε. Εδώ, διατηρούνται μόνο αντικείμενα όπου η ιδιότητα Κατάσταση ισούται με την εκτέλεση. Υπάρχουν μερικοί χειριστές σύγκρισης που μπορείτε να χρησιμοποιήσετε στο μπλοκ δέσμης ενεργειών φιλτραρίσματος:
- eq (Equal To)
- neq (δεν ισούται με)
- gt (μεγαλύτερο από)
- ge (μεγαλύτερη από ή ίση με)
- lt (Λιγότερο από)
- le (λιγότερο από ή ίσο με)
- όπως (Αγώνας μπαλαντέρ)
Ο πλήρης κατάλογος και περισσότερες πληροφορίες μπορούν να προβληθούν στο αρχείο εννοιολογικής βοήθειας about_comparison, ωστόσο χρειάζονται αρκετό χρόνο για να συνηθίσουν στη σύνταξη Where-Obeject. Αυτό είναι όλο για αυτή τη φορά!