Używam obiektu .net WebClient do realizacji pobierania plików,
I użyj PowerShell, aby zapisać się na wydarzenie DownloadProgressChanged,
Zaktualizowałem pasek postępu pobierania.
Zdarzenie subskrypcyjne korzysta z systemu Register-ObjectEvent PowerShell, a dokument wprowadzający wygląda następująco:
Streszczenie Subskrybuje zdarzenia generowane przez obiekt Microsoft .NET Framework.
gramatyka Rejestr-ObiektZdarzenie [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward] [-MaxTriggerCount <Int32>] [-MessageData <PSObject>] [-SupportEvent ] [<CommonParameters>]
wkład Brak Nie można połączyć obiektów z Register-ObjectEvent .
Wyniki System.Management.Automation.PSEventJob Ten cmdlet nie generuje żadnego wyjścia.
egzegeza * Zdarzenia, subskrypcje zdarzeń oraz kolejka zdarzeń istnieją tylko w bieżącej sesji. Jeśli zamkniesz bieżącą sesję, kolejka zdarzeń zostaje odrzucona, a subskrypcja wydarzenia anulowana.
przykład Przykład 1: Subskrybuj zdarzenia, gdy rozpoczyna się nowy proces 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"
Ten przykład subskrybuje zdarzenia generowane podczas uruchamiania nowego procesu.
Polecenie wykorzystuje obiekt ManagementEventWatcher do uzyskania zdarzeń EventArrived. Obiekt zapytania określa, że zdarzenia są zdarzeniami tworzenia instancji dla klasy Win32_Process. Przykład 2: Określ akcję odpowiadającą na zdarzenie 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 = { New-Event "PowerShell.ProcessCreated" -sender $Sender -EventArguments $EventArgs.NewEvent.TargetInstance } PS C:\>register-objectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 422cfe5a-65e... Prowadzenie prawdziwego nowego wydarzenia "PowerShe...
Ten przykład pokazuje, jak określić akcję, która ma odpowiedzieć na zdarzenie. Gdy określasz akcję, wywołane zdarzenia nie są dodawane do kolejki zdarzeń. Zamiast tego akcja reaguje na wydarzenie.
W tym przykładzie, gdy wywołane jest zdarzenie tworzenia instancji oznaczające rozpoczęcie nowego procesu, wywoływane jest nowe zdarzenie ProcessCreated.
Akcja wykorzystuje zmienne automatyczne $Sender i $EventArgs, które są wypełniane tylko dla akcji zdarzeń.
Polecenie Register-ObjectEvent zwraca obiekt zadania reprezentujący akcję, który działa jako zadanie w tle. Możesz użyć cmdletów Job, takich jak Get-Job i Receive-Job, aby zarządzać zadaniem w tle.
Więcej informacji można znaleźć w about_Jobs. Przykład 3: Subskrybuj zdarzenia obiektowe na zdalnych komputerach PS C:\>$S = New-PSSession -ComputerName "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", ' (Nowy Obiekt TimeSpan 0,0,1), ' "TargetInstance isa 'Win32_Process'" $ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" Register-ObjectEvent -input $ProcessWatcher -EventName "EventArrived" ' -SourceIdentifier $Identifier -MessageData "Test" -Forward}EnableProcessCreationEvent
Ten przykład pokazuje, jak subskrybować zdarzenia obiektowe na zdalnych komputerach.
Pierwsze polecenie tworzy PSSesje na dwóch zdalnych komputerach i zapisuje je w zmiennej $S.
Drugie polecenie wykorzystuje parametr FilePath z cmdletu Invoke-Command, aby uruchomić skrypt ProcessCreationEvent.ps1 w każdej z PSSesji w $S.
Skrypt zawiera polecenie Register-ObjectEvent, które subskrybuje zdarzenia tworzenia instancji na obiekcie Win32_Process poprzez obiekt ManagementEventWatcher i jego EventArrived wydarzenie. Przykład 4: Użyj modułu dynamicznego w obiekcie PSEventJob PS C:\>$Timer = Timery nowych obiektów.Timer PS C:\>$Timer.Interwał = 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 PS C:\>$Job | Format-List -Własność * Stan : RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 Komunikat Status: HasMoreData : Prawdziwe Lokalizacja: Polecenie: $Random= Get-Random -min 0 -max 100 JobStateInfo : Bieg Zakończone: System.Threading.ManualResetEvent InstanceId : 88944290-133d-4b44-8752-f901bd8012e2 ID : 1 Imię: Timer.Random ChildJobs : {}... PS C:\>$Timer.Enabled = $True PS C:\>& $Job.module {$Random}60 PS C:\>& $Job.module {$Random}47
Ten przykład pokazuje, jak użyć modułu dynamicznego w obiekcie PSEventJob, który powstaje po uwzględnieniu akcji w rejestracji zdarzenia.
Pierwsze polecenie wykorzystuje komandę New-Object do utworzenia obiektu timera. Drugie polecenie ustawia interwał timera na 500 (milisekund).
Trzecie polecenie wykorzystuje polecenie Register-ObjectEvent do rejestracji zdarzenia Elapsed obiektu timera. Polecenie zawiera akcję, która obsługuje to zdarzenie. Gdy upływa interwał timera, wywoływane jest zdarzenie i uruchamiane są polecenia w akcji. W takim przypadku cmdlet Get-Random generuje losową liczbę od 0 do 100 i zapisuje ją w $Randomvariable.
Gdy używasz parametru Akcja w poleceniu Register-ObjectEvent, polecenie zwraca obiekt PSEventJob, który reprezentuje akcję. Polecenie zapisuje obiekt zadania w zmiennej $Job.
Obiekt PSEventJob, który zwraca cmdlet Register-ObjectEvent, jest również dostępny w właściwości Action abonenta zdarzenia. Więcej informacji można znaleźć w sekcji Get-EventSubscriber.
Czwarte polecenie pokazuje, że zmienna $Job zawiera obiekt PSEventJob. Piąte polecenie wykorzystuje komandora Format-List do wyświetlania wszystkich właściwości obiektu PSEventJob w liście.
PSEventJob posiada właściwość Module, która zawiera dynamiczny moduł skryptowy implementujący tę akcję.
Szóste polecenie uruchamia timer.
Pozostałe polecenia wykorzystują operator wywołania (&) do wywołania polecenia w module i wyświetlenia wartości zmiennej $Random. Możesz użyć operatora wywołania do wywołania dowolnych poleceń w module, w tym tych, które nie są eksportowane. W tym przypadku polecenia pokazują losową liczbę generowaną w momencie zdarzenia Elapsed.
Więcej informacji o modułach można znaleźć w sekcji about_Modules.
Powiązane linki Wersja online: http://go.microsoft.com/fwlink/?LinkId=821845 Get-Event Nowe wydarzenie Register-EngineEvent Register-WmiEvent Zdarzenie usunięcia Unregister-Event Wydarzenie oczekiwania Na koniec dołącz kod źródłowy PS:
Turyści, jeśli chcecie zobaczyć ukrytą zawartość tego wpisu, proszę Odpowiedź
|