Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 10956|Antwort: 3

PowerShell ruft .net auf und abonniert Ereignisse [Quellcode]

[Link kopieren]
Veröffentlicht am 17.01.2017 17:05:59 | | | |


Ich benutze das .net WebClient-Objekt, um den Dateidownload zu implementieren,

Und nutze PowerShell, um das DownloadProgressChanged-Event zu abonnieren,

Die Download-Fortschrittsleiste wurde aktualisiert.

Das Abonnement-Event verwendet PowerShells Register-ObjectEvent, und das Einführungsdokument ist wie folgt:

Zusammenfassung
    Abonniert die Ereignisse, die von einem Microsoft .NET Framework-Objekt generiert werden.

Grammatik
    Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Weitergeleitet] [-MaxTriggerCount<Int32>] [-MessageData <PSObject>] [-SupportEvent] [<CommonParameters>]


Eingabe
    Nichts
    Du kannst Objekte nicht an Register-ObjectEvent weiterleiten.

Ausgabe
    System.Management.Automation.PSEventJob
    Dieses Cmdlet erzeugt keine Ausgabe.

Exegese
    * Events, Event-Abonnements und die Event-Warteschlange existieren nur in der aktuellen Sitzung. Wenn du die aktuelle Sitzung schließt, wird die Event-Warteschlange verworfen und das Event-Abonnement wird gekündigt.
   

Beispiel
    Beispiel 1: Abonnieren Sie Ereignisse, wenn ein neuer Prozess beginnt
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query
    PS C:\>Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
   
    Dieses Beispiel umfasst Ereignisse, die entstehen, wenn ein neuer Prozess beginnt.

Der Befehl verwendet das Objekt ManagementEventWatcher, um EventArrived-Events zu erhalten. Ein Abfrageobjekt gibt an, dass die Ereignisse Instanzerstellungsereignisse für die Win32_Process-Klasse sind.
    Beispiel 2: Geben Sie eine Aktion an, um auf ein Ereignis zu reagieren
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $query
    PS C:\>$Action = { New-Event "PowerShell.ProcessCreated" -sender $Sender -eventArguments $EventArgs.NewEvent.TargetInstance }
    PS C:\>register-objectEvent -InputObject $ProcessWatcher -eventName "EventArrived" -aktion $Action
    ID-Name State HasMoreData Location Befehl
    --    ----            -----      -----------     --------             -------
    2 422cfe5A-65e... Echtes neues Event "PowerShe...
   
    Dieses Beispiel zeigt, wie man eine Aktion spezifiziert, um auf ein Ereignis zu reagieren. Wenn du eine Aktion angibst, werden Ereignisse, die aktiviert werden, nicht zur Ereigniswarteschlange hinzugefügt. Stattdessen reagiert die Handlung auf das Ereignis.

In diesem Beispiel wird ein neues ProcessCreated-Ereignis ausgelöst, das anzeigt, dass ein neuer Prozess gestartet wurde.

Die Aktion verwendet die $Sender und $EventArgs automatischen Variablen, die nur für Ereignisaktionen ausgefüllt werden.

Der Befehl Register-ObjectEvent gibt ein Jobobjekt zurück, das die Aktion repräsentiert und als Hintergrundjob ausgeführt wird. Sie können die Job-Kommandos wie Get-Job und Receive-Job verwenden, um den Hintergrundjob zu verwalten.

Weitere Informationen finden Sie about_Jobs.
    Beispiel 3: Abonnieren Sie Objektereignisse auf entfernten Computern
    PS C:\>$S = New-PSSession -ComputerName "Server01, Server02"
    PS C:\> Invoke-Befehl -Session $S -FilePath ProcessCreationEvent.ps1
    PS C:\> Invoke-Command -Session $S { get-event }# ProcessCreationEvent.ps1function Enable-ProcessCreationEvent{ $Query = New-Object System.Management.WqlEventQuery "__ InstanceCreationEvent", '
       (Neuobjekt-Zeitspann 0,0,1), '
       "TargetInstance isa 'Win32_Process'" $ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" Register-ObjectEvent -Eingabe $ProcessWatcher -EventName "EventArrived" '
       -SourceIdentifier $Identifier -MessageData "Test" -Forward}EnableProcessCreationEvent
   
    Dieses Beispiel zeigt, wie man Objektereignisse auf entfernten Computern abonniert.

Der erste Befehl erzeugt PSSessions auf zwei entfernten Computern und speichert sie in der $S-Variable.

Der zweite Befehl verwendet den FilePath-Parameter des Invoke-Command-Cmdlets, um das Skript ProcessCreationEvent.ps1 in jedem der PSSessions in $S auszuführen.

Das Skript enthält einen Befehl Register-ObjectEvent, der Instanz-Erstellungsereignisse auf dem Win32_Process Objekt über das ManagementEventWatcher-Objekt und dessen EventArrived abonniert Ereignis.
    Beispiel 4: Verwenden Sie das dynamische Modul im PSEventJob-Objekt
    PS C:\>$Timer = New-Object Timer.Timer
    PS C:\>$Timer.Interval = 500
    PS C:\>$Job = Register-ObjektEvent -Eingabeobjekt $Timer -EreignisName verlaufen -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100}
    PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob
    PS C:\>$Job | Format-Liste -Eigenschaft *
    Bundesstaat:
    RunningModule: __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    StatusNachricht :
    HasMoreData: Wahr
    Lage:
    Befehl : $Random= Get-Random -Min 0 -Max 100
    JobStateInfo : Laufen
    Fertig: System.Threading.ManualResetEvent
    InstanceId: 88944290-133d-4b44-8752-f901bd8012e2
    ID: 1
    Name: Timer. Zufällig
    ChildJobs: {}... PS C:\>$Timer.Enabled = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Dieses Beispiel zeigt, wie man das dynamische Modul im PSEventJob-Objekt verwendet, das erstellt wird, wenn man eine Aktion in eine Ereignisregistrierung einfügt.

Der erste Befehl verwendet das New-Object-Cmdlet, um ein Timer-Objekt zu erstellen. Der zweite Befehl setzt das Intervall des Timers auf 500 (Millisekunden).

Der dritte Befehl verwendet das cmdlet Register-ObjectEvent, um das verlaufende Ereignis des Timer-Objekts zu registrieren. Der Befehl enthält eine Aktion, die das Ereignis verwaltet. Immer wenn das Timerintervall abläuft, wird ein Ereignis ausgelöst und die Befehle in der Aktion laufen. In diesem Fall erzeugt das Get-Random-Cmdlet eine Zufallszahl zwischen 0 und 100 und speichert sie im $Randomvariable.

Wenn Sie einen Action-Parameter in einem Register-ObjectEvent-Befehl verwenden, gibt der Befehl ein PSEventJob-Objekt zurück, das die Aktion darstellt. Der Befehl speichert das Jobobjekt in der $Job-Variable.

Das PSEventJob-Objekt, das das Register-ObjectEvent-Kommando zurückgibt, ist ebenfalls in der Action-Eigenschaft des Ereignisabonnenten verfügbar. Weitere Informationen finden Sie unter Get-EventSubscriber.

Der vierte Befehl zeigt, dass die $Job-Variable ein PSEventJob-Objekt enthält. Der fünfte Befehl verwendet das cmdlet Format-List, um alle Eigenschaften des PSEventJob-Objekts in einer Liste anzuzeigen.

Der PSEventJob besitzt eine Modul-Eigenschaft, die ein dynamisches Skriptmodul enthält, das die Aktion implementiert.

Der sechste Befehl aktiviert den Timer.

Die übrigen Befehle verwenden den Aufrufoperator (&), um den Befehl im Modul aufzurufen und den Wert der $Random-Variablen anzuzeigen. Sie können den Aufrufoperator verwenden, um jeden Befehl in einem Modul aufzurufen, einschließlich Befehlen, die nicht exportiert werden. In diesem Fall zeigen die Befehle die Zufallszahl an, die generiert wird, wenn das verlaufende Ereignis eintritt.

Weitere Informationen zu Modulen finden Sie about_Modules.


VerwandteLinks
    Online-Version: http://go.microsoft.com/fwlink/?LinkId=821845
    Get-Event
    Neues Ereignis
    Register-EngineEvent
    Register-WmiEvent
    Entfernen-Ereignis
    Unregistrierungsereignis
    Warte-Ereignis

Zum Schluss fügen Sie den PS-Quellcode an:

Touristen, wenn ihr den versteckten Inhalt dieses Beitrags sehen wollt, bitteAntwort





Vorhergehend:PowerShell-Methoden für Einzelzeilen-Kommentare, mehrzeilige Kommentare und Blockkommentare
Nächster:PowerShell nutzt den WebClient, um Dateien herunterzuladen
Veröffentlicht am 26.04.2017 14:35:44 |
132432423432423
Veröffentlicht am 16.04.2019 17:14:12 |
2222222222222
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com