Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 10956|Odpowiedź: 3

PowerShell wywołuje .net i subskrybuje zdarzenia [kod źródłowy]

[Skopiuj link]
Opublikowano 17.01.2017 17:05:59 | | | |


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ź





Poprzedni:Metody PowerShell dla komentarzy jednolinijowych, wielolinijowych i blokujących
Następny:PowerShell wykorzystuje WebClient do pobierania plików
Opublikowano 26.04.2017 14:35:44 |
132432423432423
Opublikowano 16.04.2019 17:14:12 |
2222222222222
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com