|
|
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, bitte Antwort
|
Vorhergehend:PowerShell-Methoden für Einzelzeilen-Kommentare, mehrzeilige Kommentare und BlockkommentareNächster:PowerShell nutzt den WebClient, um Dateien herunterzuladen
|