Geek School Μάθετε πώς να χρησιμοποιείτε θέσεις εργασίας στο PowerShell
Το PowerShell διαθέτει τέσσερις τύπους εργασιών - Υποδομές φόντου, Απομακρυσμένες εργασίες, Εργασίες WMI και Προγραμματισμένες εργασίες. Ελάτε μαζί μας καθώς ανακαλύπτουμε τι είναι και πώς μπορούμε να τις χρησιμοποιήσουμε.
Βεβαιωθείτε ότι έχετε διαβάσει τα προηγούμενα άρθρα της σειράς:
- Μάθετε πώς να αυτοματοποιήσετε τα Windows με το PowerShell
- Μάθηση χρήσης Cmdlets στο PowerShell
- Πώς να χρησιμοποιήσετε αντικείμενα στο PowerShell
- Εκμάθηση μορφοποίησης, φιλτράρισμα και σύγκριση σε PowerShell
- Μάθετε να χρησιμοποιείτε Remoting στο PowerShell
- Χρησιμοποιώντας το PowerShell για να λάβετε πληροφορίες υπολογιστή
- Εργασία με συλλογές στο PowerShell
Και μείνετε συντονισμένοι για όλη την εβδομάδα.
Εργασίες φόντου
Μέχρι τώρα όλα που σας έδειξα στο PowerShell έχουν συγχρονισθεί, πράγμα που σημαίνει ότι πληκτρολογούμε κάτι στο κέλυφος και δεν μπορούμε πραγματικά να κάνουμε πολλά μέχρι να ολοκληρωθεί η εκτέλεση αυτής της εντολής. Αυτό είναι όπου έρχονται οι εργασίες φόντου. Για να ξεκινήσετε ένα φόντο, η εργασία απλά μεταβιβάζει ένα μπλοκ δέσμης ενεργειών στο cmdlet Έναρξη εργασίας.
Έναρξη εργασίας - όνομα GetFileList -Scriptblock Get-ChildItem C: \ -Recurse
Τώρα είμαστε ελεύθεροι να κάνουμε ό, τι θέλουμε στο εσωτερικό του κελύφους ενώ αυτό το μπλοκ δέσμης ενεργειών εκτελείται στο παρασκήνιο.
Όταν ξεκινάτε μια νέα εργασία, το PowerShell δημιουργεί ένα νέο αντικείμενο εργασίας που αντιπροσωπεύει αυτή την εργασία. Μπορείτε να πάρετε μια λίστα όλων των εργασιών ανά πάσα στιγμή, εκτελώντας το cmdlet Get-Job.
Τα αντικείμενα εργασίας σας ενημερώνουν για την κατάσταση των εργασιών. Για παράδειγμα, στο παραπάνω στιγμιότυπο βλέπουμε ότι έχουμε ένα BackgroundJob που ονομάζεται GetFileList το οποίο είναι ακόμα σε λειτουργία, αλλά έχει ήδη αρχίσει να επιστρέφει δεδομένα. Εάν σε οποιοδήποτε σημείο αποφασίσετε ότι η εργασία εκτελέστηκε για πολύ καιρό, μπορείτε εύκολα να την σταματήσετε με τη μεταφορά της στο Stop-Job.
Get-Job-Να πάρει GetFileList | Διακοπή εργασίας
Ωστόσο, μόλις σταματήσετε τη δουλειά σας, όσα δεδομένα έλαβε μέχρι το σημείο που σταματήσατε, εξακολουθεί να είναι διαθέσιμο. Υπάρχει, όμως, ένα gotcha. Στο PowerShell, μόλις λάβετε τα αποτελέσματα μιας εργασίας, θα διαγραφούν. Προκειμένου να παραμείνουν, πρέπει να καθορίσετε την παράμετρο του διακόπτη κρατήματος της εντολής λήψης.
Get-Job-Να πάρει GetFileList | Λήψη-Κράτηση-Κρατήστε
Αφού ολοκληρώσετε μια εργασία, είναι καλύτερο να την αφαιρέσετε. Για να καταργήσετε την εργασία, απλώς θα την ανοίξετε στο cmdlet Κατάργηση εργασίας.
Get-Job-Να πάρει GetFileList | Αφαίρεση-Εργασία
Αυτό θα το καταργήσει από τη λίστα των εργασιών που επιστρέφονται από το Get-Job.
Απομακρυσμένες εργασίες
Λίγα μαθήματα πριν, εξετάσαμε πώς μπορούμε να χρησιμοποιήσουμε remoting για να εκτελέσουμε εντολές PowerShell σε απομακρυσμένο μηχάνημα χρησιμοποιώντας το Invoke Command, αλλά ξέρατε ότι μπορείτε επίσης να χρησιμοποιήσετε το Invoke-Command για να ξεκινήσετε μια εργασία remoting στο παρασκήνιο; Για να το κάνετε αυτό, απλά προσθέστε την παράμετρο -AsJob στο τέλος της εντολής σας:
Invoke-Command -ComputerName Φλας, Viper -Credential διαχειριστής -ScriptBlock gci -AsJob
Αυτή ήταν μια απλή εντολή και θα έπρεπε να έχει τελειώσει την εκτέλεση μέχρι τώρα, έτσι ώστε να δούμε την κατάσταση των θέσεων εργασίας μας.
Χμμ, μοιάζει να απέτυχε. Αυτό με φέρνει στην πρώτη μου gotcha με δουλειές. Όταν δημιουργείτε μια νέα εργασία οποιουδήποτε τύπου στο PowerShell, δημιουργεί μία εργασία γονέα εκτός από μια εργασία παιδιού για κάθε υπολογιστή στον οποίο εκτελείτε την εργασία. Όταν χρησιμοποιείτε το cmdlet Get-Job, σας δείχνει μόνο τις εργασίες γονέων και η κατάσταση ιδιοκτησίας είναι το σενάριο χειρότερης περίπτωσης, πράγμα που σημαίνει ότι ακόμα και αν η εντολή δεν εκτελέστηκε μόνο σε ένα στους εκατό υπολογιστές, απέτυχε. Για να δείτε μια λίστα με τις εργασίες παιδιού, πρέπει να χρησιμοποιήσετε την παράμετρο IncludeChildJob.
Αν κοιτάξετε πιο κοντά, θα διαπιστώσετε ότι η δουλειά όντως αποτυγχάνει μόνο σε έναν υπολογιστή, ο οποίος μας φέρνει στην επόμενη γκανιότα. Όταν προσπαθείτε να λάβετε τα αποτελέσματα για την εργασία, εάν καθορίσετε το όνομα εργασίας ή το αναγνωριστικό εργασίας του γονέα, το PowerShell θα επιστρέψει τα δεδομένα από όλες τις εργασίες παιδιού. Το πρόβλημα είναι ότι αν υπήρχε ένα σφάλμα σε μια από τις θέσεις εργασίας του παιδιού, θα μείνει με κάποιο κόκκινο κείμενο.
Υπάρχουν δύο τρόποι να περάσετε γύρω από αυτό. Πρώτον, αν γνωρίζετε σε ποιους υπολογιστές θέλετε τα αποτελέσματα, μπορείτε απλά να χρησιμοποιήσετε την παράμετρο ComputerName του cmdlet Recieve -Job.
Get-Job-Id 3 | Receive-Job -Keep-Ονόματα υπολογιστή όνομα
Εναλλακτικά, μπορείτε να λάβετε τα αποτελέσματα από μια συγκεκριμένη εργασία παιδιού χρησιμοποιώντας το αναγνωριστικό της εργασίας.
Get-Job -Id 3 -IncludeChildJob
Get-Job-ID 5 | Λήψη-Κράτηση-Κρατήστε
Εργασίες WMI
Οι εργασίες WMI είναι οι ίδιες με τις Απομακρυσμένες Εργασίες, απαιτώντας να προστεθεί μόνο η παράμετρος -AsJob στο cmdlet Get-WmiObject.
Δυστυχώς, αυτό σημαίνει ότι υπόκεινται επίσης στο ίδιο κλειδί που ανέφερα στην ενότητα Απομακρυσμένες Εργασίες.
Προγραμματισμένες εργασίες
Τα τελευταία τρία είδη εργασιών που εξετάσαμε δεν ήταν επίμονα, που σημαίνει ότι είναι διαθέσιμα μόνο στην τρέχουσα συνεδρία σας. Βασικά, αυτό σημαίνει ότι εάν ξεκινήσετε μια δουλειά και στη συνέχεια ανοίξετε μια άλλη κονσόλα PowerShell και τρέξετε το Get-Job, δεν θα δείτε καμία εργασία. Ωστόσο, επιστρέψτε στην κονσόλα που κλωτσήσατε από την εργασία, θα μπορείτε να δείτε την κατάστασή της. Αυτό έρχεται σε αντίθεση με τις προγραμματισμένες θέσεις εργασίας είναι επίμονα. Βασικά, μια προγραμματισμένη εργασία είναι ένα μπλοκ δέσμης ενεργειών που λειτουργεί με χρονοδιάγραμμα. Στο παρελθόν, η ίδια επίδραση θα μπορούσε να επιτευχθεί χρησιμοποιώντας το Windows Task Scheduler, το οποίο είναι πραγματικά αυτό που συμβαίνει κάτω από την κουκούλα. Για να δημιουργήσετε μια νέα προγραμματισμένη εργασία, κάνουμε τα εξής:
Εγγραφή-ΠρογραμματισμένηJob-Να πάρει GetEventLogs -ScriptBlock Get-EventLog -LogName Ασφάλεια -Newest 100 -Trigger (New-JobTrigger -Daily -At 5pm) -ΜονοκίνητοJobOption (New-ScheduledJobOption -RunElevated)
Υπάρχουν πολλά πράγματα που συμβαίνουν σε αυτή την εντολή, οπότε ας το σπάσουμε.
- Πρώτον, δίνουμε στο Scheduled Job το όνομα του GetEventLogs.
- Τότε λέμε ότι όταν ενεργοποιείται, θέλουμε να εκτελέσει τα περιεχόμενα του καθορισμένου μπλοκ δέσμης ενεργειών, το οποίο βασικά λαμβάνει τις νεότερες 100 καταχωρήσεις του αρχείου καταγραφής συμβάντων ασφαλείας.
- Στη συνέχεια, καθορίζουμε μια σκανδάλη. Δεδομένου ότι η παράμετρος σκανδάλης παίρνει ένα αντικείμενο σκανδάλης ως είσοδο, χρησιμοποιήσαμε μια παρενθετική εντολή για να δημιουργήσουμε μια σκανδάλη που θα σβήνει κάθε μέρα στις 5 μ.μ..
- Δεδομένου ότι έχουμε να κάνουμε με το αρχείο καταγραφής συμβάντων, πρέπει να τρέξουμε ως διαχειριστής, τον οποίο μπορούμε να καθορίσουμε δημιουργώντας ένα νέο αντικείμενο ScheduledJobOption και μεταβιβάζοντάς το στην παράμετρο ScheduledJobOption.
Δεδομένου ότι πρόκειται για έναν ελαφρώς διαφορετικό τύπο εργασίας, θα χρειαστεί επίσης να χρησιμοποιήσετε μια διαφορετική εντολή για να ανακτήσετε μια λίστα όλων των προγραμματισμένων εργασιών σε μια μηχανή.
Get-ScheduledJob
Αυτό είναι το μόνο που υπάρχει σε αυτό.