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

Άποψη: 10956|Απάντηση: 3

Το PowerShell καλεί .net και εγγράφεται σε συμβάντα [πηγαίος κώδικας]

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 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 για τη λήψη αρχείων
Δημοσιεύτηκε στις 26/4/2017 2:35:44 μ.μ. |
132432423432423
Δημοσιεύτηκε στις 16/4/2019 5:14:12 μ.μ. |
2222222222222
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com