11Sep

Σχολή Geek: Εργασία με συλλογές στο PowerShell

Δεδομένου ότι το PowerShell βασίζεται στο. Net Framework και ενσωματώνει διάφορες άλλες τεχνολογίες όπως το WMI και το CIM, υπάρχουν πάντα περισσότεροι από ένας τρόποι για να επιτευχθεί το ίδιο πράγμα.Ελάτε μαζί μας για αυτή τη σύντομη ανάρτηση, όπου μαθαίνουμε πώς να επιλέγουμε την καλύτερη μέθοδο για την εκπλήρωση των καθηκόντων μας.

Να είστε βέβαιος να διαβάσετε τα προηγούμενα άρθρα της σειράς:

  • Μάθετε πώς να αυτοματοποιήσετε τα Windows με PowerShell
  • Μάθετε να χρησιμοποιείτε Cmdlets στο PowerShell
  • Μάθετε πώς να χρησιμοποιείτε αντικείμενα στο PowerShell
  • Μάθηση μορφοποίησης, φιλτραρίσματος και σύγκρισης σε PowerShell
  • Μάθετε να χρησιμοποιείτε Remoting inPowerShell
  • Χρησιμοποιώντας το PowerShell για να λάβετε πληροφορίες υπολογιστή

Και μείνετε συντονισμένοι για την υπόλοιπη σειρά όλη την εβδομάδα.

Χρησιμοποιώντας το Batch Cmdlets

Νωρίτερα στη σειρά, όταν σας παρουσιάσαμε στον αγωγό, σας παρουσιάσαμε πώς μπορείτε να πάρετε τα αντικείμενα που εξάγει ένα cmdlet και να τα μεταβιβάσετε ως είσοδο σε άλλο cmdlet χρησιμοποιώντας κάτι παρόμοιο:

Get-Process -Όνομα σημειώματοςStop-Process

Αυτό θα σκοτώσει οποιαδήποτε διαδικασία με το όνομα "σημειωματάριο".Αλλά πιθανώς να αναρωτιέστε πώς το PowerShell είναι σε θέση να σκοτώσει κάθε εμφάνιση notepad με μία μόνο εντολή.Η απάντηση βρίσκεται μέσα από τη βοήθεια του cmdlet Stop-Process.

help Stop-Process -Full

Αν κοιτάξετε την τελευταία γραμμή κώδικα στην ενότητα σύνταξης, μπορείτε να δείτε ότι η παράμετρος InputObject δέχεται ένα αντικείμενο τύπου Process [] και κάθε φορά που βλέπετε έναν τύπο ακολουθούμενο από δύο αγκύλες όπωςότι σημαίνει ότι η παράμετρος δέχεται ένα ή περισσότερα του προηγούμενου τύπου.Στην περίπτωση αυτή, δέχεται ένα ή περισσότερα αντικείμενα διαδικασίας.Από τεχνική άποψη, θα λέγαμε ότι το cmdlet InputObject δέχεται μια διεργασία array .Κάθε φορά που έχετε ένα cmdlet που υποστηρίζει λειτουργίες παρτίδας με αυτόν τον τρόπο, χρησιμοποιήστε το.Αυτή είναι η πρώτη επιλογή.

Χρησιμοποιώντας το WMI

Παρόλο που το WMI δεν είναι το καλύτερο κομμάτι της τεχνολογίας για να μεταφερθεί από το κεντρικό τμήμα της Microsoft, θα εμφανιστεί στη δεύτερη θέση στη λίστα με τον τρόπο εργασίας με συλλογές αντικειμένων.Θα μπορούσαμε εύκολα να βρούμε μια λίστα με τρέχουσες διεργασίες από την κλάση Win32_Process όπως π.χ.:

Get-WmiObject-Class Win32_Process

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

Get-WmiObject-Κλάση Win32_Process |Get-Μέλος

Φαίνεται ότι το πιο κοντινό πράγμα που πρέπει να σταματήσουμε είναι η μέθοδος τερματισμού, έτσι πρέπει να είναι αυτή.Για να καλέσετε μια μέθοδο σε ένα αντικείμενο WMI, απλά το διοχετεύετε στο Invoke-WmiMethod και καθορίστε το όνομα της μεθόδου.

Get-WmiObject - Κλάση Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Με τερματίσετε

Μεγάλη, αυτό έκανε το τέχνασμα.Κάθε φορά που παίρνετε ReturnValue 0 στο WMI, θυμηθείτε ότι η εντολή εκτελέστηκε με επιτυχία.

Καταμέτρηση

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

Get-Process |Μέθοδος Get-Member -MemberType

Τέλεια, μοιάζει να μπορούμε να χρησιμοποιήσουμε τη μέθοδο Kill και στη συνέχεια να κάνουμε σωλήνα στο ForEach-Object για να τα σκοτώσουμε όλα.

Get-Process - σημειωματάριο |ForEach-Object -Process{ $ _. Kill()}

Εδώ πήραμε όλα τα αντικείμενα διαδικασίας που επέστρεψε η Get-Process και τα πέρασαν στο cmdlet ForEach-Object.Όπως και το cmdlet "Πού-αντικειμένου", εκπροσωπούσαμε κάθε αντικείμενο που βρίσκεται υπό επεξεργασία με $ _ το οποίο μπορέσαμε να καλέσουμε στη μέθοδο Kill() .Με όλα όσα είπαν και έκαναν, η απαρίθμηση μιας συλλογής είναι πολύ πιο αργή από τις παραπάνω μεθόδους και πρέπει να χρησιμοποιηθεί μόνο ως τελευταίο αποτέλεσμα.

Περίληψη

Επιλογή One

Get-Process -αυτός σημειωματάριο |Διακοπή διεργασίας

Επιλογή δύο

Get-WmiObject-Κλάση Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Με τερματίσουμε

Επιλογή Τρεις

Get-Process -απομνημόνευση notepad |ForEach-Object -Process{ $ _. Kill()}

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