Register-EngineEvent
Subskrybuje zdarzenia generowane przez silnik programu PowerShell oraz polecenie cmdlet New-Event
.
Składnia
Register-EngineEvent
[-SourceIdentifier] <String>
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Opis
Polecenie cmdlet Register-EngineEvent
subskrybuje zdarzenia, które są generowane przez silnik PowerShell i polecenie cmdlet New-Event
. Użyj parametru SourceIdentifier, aby określić zdarzenie.
Tego polecenia cmdlet można użyć do subskrybowania
Po zasubskrybowaniu zdarzenia subskrybent zdarzenia zostanie dodany do sesji. Aby uzyskać subskrybentów zdarzeń w sesji, użyj cmdletu Get-EventSubscriber
. Aby anulować subskrypcję, użyj polecenia cmdlet Unregister-Event
, które usuwa subskrybenta zdarzeń z sesji.
Po wystąpieniu zdarzenia subskrybowanego jest ono dodawane do kolejki zdarzeń w sesji. Aby uzyskać zdarzenia w kolejce zdarzeń, użyj polecenia cmdlet Get-Event
.
Przykłady
Przykład 1: Rejestrowanie zdarzenia silnika programu PowerShell na komputerach zdalnych
W tym przykładzie rejestruje się zdarzenie w aparacie PowerShell na dwóch komputerach zdalnych.
$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S {
Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Forward
}
New-PSSession
tworzy sesję zarządzaną przez użytkownika (PSSession) na każdym z komputerów zdalnych. Polecenie cmdlet Invoke-Command
uruchamia polecenie Register-EngineEvent
w sesjach zdalnych.
Register-EngineEvent
używa parametru SourceIdentifier w celu zidentyfikowania zdarzenia. Parametr Forward informuje moduł o przekazywaniu zdarzeń z sesji zdalnej do sesji lokalnej.
Przykład 2: Wykonaj określoną akcję, gdy wystąpi zdarzenie zakończenia
W tym przykładzie pokazano, jak uruchomić Register-EngineEvent
, aby wykonać określoną akcję, gdy wystąpi zdarzenie PowerShell.Exiting.
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
Get-History | Export-Clixml $HOME\history.clixml
}
Dodano parametr SupportEvent w celu ukrycia subskrypcji zdarzeń. Gdy program PowerShell zakończy działanie, historia poleceń z kończącej się sesji jest eksportowana do pliku XML w katalogu $HOME
użytkownika.
Przykład 3. Tworzenie i subskrybowanie zdarzenia zdefiniowanego przez użytkownika
W tym przykładzie jest tworzona subskrypcja zdarzeń ze źródła MyEventSource. Jest to dowolne źródło, którego będziemy używać do monitorowania postępu zadania.
Register-EngineEvent
służy do tworzenia subskrypcji. Blok skryptu dla parametru akcji zapisuje dane zdarzenia do pliku tekstowego.
Register-EngineEvent -SourceIdentifier MyEventSource -Action {
"Event: {0}" -f $event.MessageData | Out-File c:\temp\MyEvents.txt -Append
}
Start-Job -Name TestJob -ScriptBlock {
While ($True) {
Register-EngineEvent -SourceIdentifier MyEventSource -Forward
Start-Sleep -seconds 2
"Doing some work..."
$newEventSplat = @{
SourceIdentifier = 'MyEventSource'
MessageData = ("{0} - Work done..." -f (Get-Date))
}
New-Event @newEventSplat
}
}
Start-Sleep -seconds 4
Get-EventSubscriber
Get-Job
SubscriptionId : 12
SourceObject :
EventName :
SourceIdentifier : MyEventSource
Action : System.Management.Automation.PSEventJob
HandlerDelegate :
SupportEvent : False
ForwardEvent : False
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
18 MyEventSource Running True …
19 TestJob BackgroundJob Running True localhost …
Register-EngineEvent
utworzono identyfikator zadania 18.
Start-Job
utworzono zadanie z identyfikatorem 19. W przykładzie nr 4 usuwamy subskrypcję zdarzeń i zadania, a następnie sprawdzamy plik dziennika.
Przykład 4. Wyrejestrowywanie zdarzeń i czyszczenie zadań
Jest to kontynuacja przykładu 3. W tym przykładzie poczekamy 10 sekund, aby umożliwić wystąpienie kilku zdarzeń. Następnie wyrejestrujemy subskrypcję zdarzeń.
PS> Start-Sleep -seconds 10
PS> Get-EventSubscriber | Unregister-Event
PS> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
18 MyEventSource Stopped False …
19 TestJob BackgroundJob Running True localhost …
PS> Stop-Job -Id 19
PS> Get-Job | Remove-Job
PS> Get-Content C:\temp\MyEvents.txt
Event: 2/18/2020 2:36:19 PM - Work done...
Event: 2/18/2020 2:36:21 PM - Work done...
Event: 2/18/2020 2:36:23 PM - Work done...
Event: 2/18/2020 2:36:25 PM - Work done...
Event: 2/18/2020 2:36:27 PM - Work done...
Event: 2/18/2020 2:36:29 PM - Work done...
Event: 2/18/2020 2:36:31 PM - Work done...
Polecenie cmdlet Unregister-Event
zatrzymuje zadanie skojarzone z subskrypcją zdarzeń (identyfikator zadania 18). Identyfikator zadania 19 jest nadal uruchomiony i tworzy nowe zdarzenia. Używamy poleceń cmdlet Job, aby zatrzymać zadanie i usunąć zbędne obiekty zadań.
Get-Content
wyświetla zawartość pliku dziennika.
Parametry
-Action
Określa polecenia do obsługi zdarzeń. Polecenia w Akcja są wykonywane, gdy zostaje wywołane zdarzenie, zamiast wysyłania go do kolejki zdarzeń. Dołącz polecenia w nawiasach klamrowych ({}
), aby utworzyć blok skryptu.
Wartość parametru Akcja może zawierać zmienne automatyczne $Event
, $EventSubscriber
, $Sender
, $EventArgs
i $Args
, które dostarczają informacji dotyczących zdarzenia do bloku skryptu Akcja. Aby uzyskać więcej informacji, zobacz about_Automatic_Variables.
Po określeniu akcji Register-EngineEvent
zwraca obiekt zadania zdarzenia, który reprezentuje akcję. Polecenia cmdlet zadania umożliwiają zarządzanie zadaniem zdarzenia.
Typ: | ScriptBlock |
Position: | 101 |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Forward
Wskazuje, że polecenie cmdlet wysyła zdarzenia związane z tą subskrypcją do sesji na komputerze lokalnym. Użyj tego parametru podczas rejestrowania zdarzeń na komputerze zdalnym lub w sesji zdalnej.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-MaxTriggerCount
Określa maksymalną liczbę razy, kiedy akcja jest wykonana w ramach subskrypcji zdarzenia.
Typ: | Int32 |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-MessageData
Ten parametr jest częścią klasy bazowej dla wszystkich cmdletów zdarzeń.
Register-EngineEvent
nie używa tego parametru. Wszystkie dane przekazane do tego parametru są ignorowane.
Typ: | PSObject |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-SourceIdentifier
Określa identyfikator źródłowy zdarzenia, do którego subskrybujesz. Identyfikator źródła musi być unikatowy w bieżącej sesji. Ten parametr jest wymagany.
Wartość tego parametru jest wyświetlana w wartości właściwości SourceIdentifier obiektu subskrybenta i wszystkich obiektów zdarzeń skojarzonych z tą subskrypcją.
Wartość jest specyficzna dla źródła zdarzenia. Może to być dowolna wartość utworzona do użycia z poleceniem cmdlet New-Event
. Silnik PowerShell obsługuje wartości PSEngineEventPowerShell.Exiting i PowerShell.OnIdle.
Typ: | String |
Position: | 100 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-SupportEvent
Wskazuje, że cmdlet ukrywa subskrypcję zdarzenia. Dodaj ten parametr, gdy bieżąca subskrypcja jest częścią bardziej złożonego mechanizmu rejestracji zdarzeń i nie powinna być odnajdywane niezależnie.
Aby wyświetlić lub anulować subskrypcję utworzoną za pomocą parametru SupportEventEvent, dodaj parametr Force do poleceń cmdlet Get-EventSubscriber
lub Unregister-Event
.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
Dane wejściowe
None
Nie można potokować obiektów z tym poleceniem cmdlet.
Dane wyjściowe
None
Domyślnie to polecenie cmdlet nie zwraca żadnych danych wyjściowych.
Jeśli używasz parametru action
Uwagi
Zdarzenia, subskrypcje zdarzeń i kolejka zdarzeń istnieją tylko w bieżącej sesji. Jeśli zamkniesz bieżącą sesję, kolejka zdarzeń zostanie usunięta, a subskrypcja zdarzeń anulowana.
Podczas subskrybowania zdarzenia Opuszczanie polecenia cmdlet, które mogą być uruchamiane za pomocą parametru Action, są ograniczone do poleceń cmdlet w modułach Microsoft.PowerShell.Core i Microsoft.PowerShell.Utility. Zdarzenie Exiting jest wyzwalane tylko wtedy, gdy sesja zostanie zakończona pod kontrolą programu PowerShell. Zdarzenie nie jest wyzwalane po zamknięciu aplikacji hosta lub okna terminalu.
Silnik jest uważany za bezczynny, jeśli nie uruchamia procesu. Zdarzenie OnIdle jest uruchamiane, gdy program PowerShell jest bezczynny przez 300 milisekund (ms).
Notatka
Gdy PSReadLine jest używane, zdarzenie OnIdle jest wyzwalane, gdy ReadKey()
osiąga limit czasu (brak wpisywania przez 300 ms). Zdarzenie może być zasygnalizowane, gdy użytkownik znajduje się w trakcie edytowania wiersza polecenia, na przykład użytkownik odczytuje pomoc, aby zdecydować, który parametr ma być używany. Począwszy od programu PSReadLine 2.2.0-beta4, zachowanie OnIdle zostało zmienione, aby zasygnalizować zdarzenie tylko wtedy, gdy występuje limit czasu ReadKey()
, a bieżący bufor edycji jest pusty.