|
|
Δημοσιεύτηκε στις 17/1/2017 5:05:59 μ.μ.
|
|
|
|

Χρησιμοποιώ το αντικείμενο .net WebClient για να υλοποιήσω τη λήψη του αρχείου,
Και χρησιμοποιήστε το powershell για να εγγραφείτε στο συμβάν DownloadProgressChanged,
Ενημερώθηκε η γραμμή προόδου λήψης.
Το συμβάν συνδρομής χρησιμοποιεί το Register-ObjectEvent του powershell και το εισαγωγικό έγγραφο έχει ως εξής:
Περίληψη Εγγράφεται στα συμβάντα που δημιουργούνται από ένα αντικείμενο Microsoft .NET Framework.
γραμματική Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward ] [-MaxTriggerCount <Int32>] [-MessageData <PSObject>] [-ΕκδήλωσηΥποστήριξης] [<CommonParameters>]
εισαγωγή Κανένας Δεν μπορείτε να διοχετεύσετε αντικείμενα στο Register-ObjectEvent .
Παραγωγή System.Management.Automation.PSEventJob Αυτό το cmdlet δεν παράγει καμία έξοδο.
εξήγηση * Τα συμβάντα, οι συνδρομές συμβάντων και η ουρά συμβάντων υπάρχουν μόνο στην τρέχουσα περίοδο λειτουργίας. Εάν κλείσετε την τρέχουσα περίοδο λειτουργίας, η ουρά συμβάντων απορρίπτεται και η συνδρομή συμβάντος ακυρώνεται.
παράδειγμα Παράδειγμα 1: Εγγραφείτε σε συμβάντα όταν ξεκινά μια νέα διαδικασία PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" PS C:\>$ProcessWatcher = Νέο αντικείμενο System.Management.ManagementEventWatcher $Query PS C:\>Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
Αυτό το παράδειγμα εγγράφεται σε συμβάντα που δημιουργούνται όταν ξεκινά μια νέα διεργασία.
Η εντολή χρησιμοποιεί το αντικείμενο ManagementEventWatcher για τη λήψη συμβάντων EventArrives. Ένα αντικείμενο ερωτήματος καθορίζει ότι τα συμβάντα είναι συμβάντα δημιουργίας στιγμιότυπου για την κλάση Win32_Process. Παράδειγμα 2: Καθορίστε μια ενέργεια για απόκριση σε ένα συμβάν PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" PS C:\>$ProcessWatcher = Νέο αντικείμενο System.Management.ManagementEventWatcher $query PS C:\>$Action = { Νέο συμβάν "PowerShell.ProcessCreated" -Sender $Sender -EventArguments $EventArgs.NewEvent.TargetInstance } PS C:\>register-objectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action Όνομα αναγνωριστικού Κατάσταση HasMoreData Εντολή τοποθεσίας -- ---- ----- ----------- -------- ------- 2 422CFE5A-65E... Τρέχοντας αληθινή νέα εκδήλωση "PowerShe...
Αυτό το παράδειγμα δείχνει πώς μπορείτε να καθορίσετε μια ενέργεια για απόκριση σε ένα συμβάν. Όταν καθορίζετε μια ενέργεια, τα συμβάντα που αυξάνονται δεν προστίθενται στην ουρά συμβάντων. Αντίθετα, η δράση ανταποκρίνεται στο συμβάν.
Σε αυτό το παράδειγμα, όταν δημιουργείται ένα συμβάν δημιουργίας παρουσίας που υποδεικνύει ότι ξεκινά μια νέα διεργασία, δημιουργείται ένα νέο συμβάν ProcessCreated.
Η ενέργεια χρησιμοποιεί τις αυτόματες μεταβλητές $Sender και $EventArgs, οι οποίες συμπληρώνονται μόνο για ενέργειες συμβάντος.
Η εντολή Register-ObjectEvent επιστρέφει ένα αντικείμενο εργασίας που αντιπροσωπεύει την ενέργεια, η οποία εκτελείται ως εργασία παρασκηνίου. Μπορείτε να χρησιμοποιήσετε τα cmdlet εργασίας, όπως Get-Job και Receive-Job, για να διαχειριστείτε την εργασία παρασκηνίου.
Για περισσότερες πληροφορίες, ανατρέξτε about_Jobs. Παράδειγμα 3: Εγγραφή σε συμβάντα αντικειμένων σε απομακρυσμένους υπολογιστές PS C:\>$S = New-PSSession -Όνομα_υπολογιστή "Server01, Server02" PS C:\> Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1 PS C:\> Invoke-Command -Session $S { get-event }# ProcessCreationEvent.ps1function Enable-ProcessCreationEvent{ $Query = New-Object System.Management.WqlEventQuery "__ InstanceCreationEvent", ' (Χρονικό διάστημα νέου αντικειμένου 0,0,1), ' "TargetInstance isa 'Win32_Process'" $ProcessWatcher = Νέο αντικείμενο System.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" Register-ObjectEvent -Input $ProcessWatcher -EventName "EventArrived" ' -SourceIdentifier $Identifier -MessageData "Δοκιμή" -Forward}EnableProcessCreationEvent
Αυτό το παράδειγμα δείχνει πώς μπορείτε να εγγραφείτε σε συμβάντα αντικειμένων σε απομακρυσμένους υπολογιστές.
Η πρώτη εντολή δημιουργεί PSSessions σε δύο απομακρυσμένους υπολογιστές και τους αποθηκεύει στη μεταβλητή $S.
Η δεύτερη εντολή χρησιμοποιεί την παράμετρο FilePath του cmdlet Invoke-Command για να εκτελέσει το σενάριο ProcessCreationEvent.ps1 σε κάθε ένα από τα PSSessions στο $S.
Η δέσμη ενεργειών περιλαμβάνει μια εντολή Register-ObjectEvent που εγγράφεται σε συμβάντα δημιουργίας παρουσίας στο αντικείμενο Win32_Process μέσω του αντικειμένου ManagementEventWatcher και του EventArrived εκδήλωση. Παράδειγμα 4: Χρησιμοποιήστε τη δυναμική μονάδα στο αντικείμενο PSEventJob PS C:\>$Timer = Χρονόμετρα νέου αντικειμένου.Χρονόμετρο PS C:\>$Timer.Διάστημα = 500 PS C:\>$Job = Register-ObjectEvent -InputObject $Timer -EventName Elapsed -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100} PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob ΥΓ Γ:\>$Job | Μορφή-Λίστα -Ιδιότητα * Κατάσταση : RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 ΚατάστασηΜήνυμα : HasMoreData : Σωστό Τοποθεσία : Εντολή : $Random= Get-Random -min 0 -max 100 JobStateInfo : Τρέξιμο Ολοκληρώθηκε: System.Threading.ManualResetEvent Αναγνωριστικό παρουσίας : 88944290-133d-4b44-8752-f901bd8012e2 Ταυτότητα : 1 Όνομα : Timer.Random ChildJobs : {}... PS C:\>$Timer.Enabled = $True ΥΓ C:\>& $Job.module {$Random}60 ΥΓ C:\>& $Job.module {$Random}47
Αυτό το παράδειγμα δείχνει πώς μπορείτε να χρησιμοποιήσετε τη δυναμική λειτουργική μονάδα στο αντικείμενο PSEventJob που δημιουργείται όταν συμπεριλαμβάνετε μια ενέργεια σε μια καταχώρηση συμβάντος.
Η πρώτη εντολή χρησιμοποιεί το cmdlet New-Object για να δημιουργήσει ένα αντικείμενο χρονομέτρου. Η δεύτερη εντολή ορίζει το διάστημα του χρονοδιακόπτη στα 500 (χιλιοστά του δευτερολέπτου).
Η τρίτη εντολή χρησιμοποιεί το cmdlet Register-ObjectEvent για να καταχωρήσει το συμβάν Elapsed του αντικειμένου χρονομέτρου. Η εντολή περιλαμβάνει μια ενέργεια που χειρίζεται το συμβάν. Κάθε φορά που παρέρχεται το διάστημα του χρονοδιακόπτη, σηκώνεται ένα συμβάν και εκτελούνται οι εντολές στην ενέργεια. Σε αυτήν την περίπτωση, το cmdlet Get-Random δημιουργεί έναν τυχαίο αριθμό μεταξύ 0 και 100 και τον αποθηκεύει στο $Randomvariable.
Όταν χρησιμοποιείτε μια παράμετρο Action σε μια εντολή Register-ObjectEvent, η εντολή επιστρέφει ένα αντικείμενο PSEventJob που αντιπροσωπεύει την ενέργεια. Η εντολή αποθηκεύει το αντικείμενο εργασίας στη μεταβλητή $Job.
Το αντικείμενο PSEventJob που επιστρέφει το cmdlet Register-ObjectEvent είναι επίσης διαθέσιμο στην ιδιότητα Action του συνδρομητή συμβάντος. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Get-EventSubscriber.
Η τέταρτη εντολή δείχνει ότι η μεταβλητή $Job περιέχει ένα αντικείμενο PSEventJob. Η πέμπτη εντολή χρησιμοποιεί το cmdlet Format-List για να εμφανίσει όλες τις ιδιότητες του αντικειμένου PSEventJob σε μια λίστα.
Το PSEventJob έχει μια ιδιότητα Module που περιέχει μια δυναμική λειτουργική μονάδα δέσμης ενεργειών που υλοποιεί την ενέργεια.
Η έκτη εντολή ενεργοποιεί το χρονόμετρο.
Οι υπόλοιπες εντολές χρησιμοποιούν τον τελεστή κλήσης (&) για να καλέσουν την εντολή στη λειτουργική μονάδα και να εμφανίσουν την τιμή της μεταβλητής $Random. Μπορείτε να χρησιμοποιήσετε τον τελεστή κλήσης για να καλέσετε οποιαδήποτε εντολή σε μια λειτουργική μονάδα, συμπεριλαμβανομένων των εντολών που δεν εξάγονται. Σε αυτήν την περίπτωση, οι εντολές εμφανίζουν τον τυχαίο αριθμό που δημιουργείται όταν συμβαίνει το συμβάν που έχει παρέλθει.
Για περισσότερες πληροφορίες σχετικά με τις λειτουργικές μονάδες, ανατρέξτε στην ενότητα about_Modules.
ΣχετικοίΣύνδεσμοι Ηλεκτρονική έκδοση: http://go.microsoft.com/fwlink/?LinkId=821845 Λήψη-Εκδήλωση Νέα εκδήλωση Εγγραφή-EngineEvent Εγγραφή-WmiEvent Αφαίρεση-Συμβάν Unregister-Συμβάν Αναμονή-Εκδήλωση Τέλος, επισυνάψτε τον πηγαίο κώδικα PS:
Τουρίστες, αν θέλετε να δείτε το κρυφό περιεχόμενο αυτής της ανάρτησης, παρακαλώ Απάντηση
|
Προηγούμενος:Μέθοδοι PowerShell για σχόλια μίας γραμμής, σχόλια πολλών γραμμών και μπλοκ σχολίωνΕπόμενος:Το PowerShell χρησιμοποιεί το WebClient για τη λήψη αρχείων
|