Register-EngineEvent
Abonneert u op gebeurtenissen die worden gegenereerd door de PowerShell-engine en door de New-Event
cmdlet.
Syntax
Register-EngineEvent
[-SourceIdentifier] <String>
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Description
De Register-EngineEvent
cmdlet abonneert zich op gebeurtenissen die worden gegenereerd door de PowerShell-engine en de New-Event
cmdlet. Gebruik de parameter SourceIdentifier om de gebeurtenis op te geven.
U kunt deze cmdlet gebruiken om u te abonneren op de gebeurtenissen en gebeurtenissen van de OnIdle-engine of om gebeurtenissen af te sluiten die door de New-Event
cmdlet zijn gegenereerd. Deze gebeurtenissen worden automatisch toegevoegd aan de gebeurteniswachtrij in uw sessie zonder u te abonneren. Met abonneren kunt u echter de gebeurtenissen doorsturen, een actie opgeven om te reageren op de gebeurtenissen en het abonnement opzeggen.
Wanneer u zich abonneert op een gebeurtenis, wordt er een gebeurtenisabonnee toegevoegd aan uw sessie. Gebruik de Get-EventSubscriber
cmdlet om de gebeurtenisabonnees in de sessie op te halen. Als u het abonnement wilt annuleren, gebruikt u de Unregister-Event
cmdlet, waarmee de gebeurtenisabonnee uit de sessie wordt verwijderd.
Wanneer de geabonneerde gebeurtenis wordt gegenereerd, wordt deze toegevoegd aan de gebeurteniswachtrij in uw sessie. Gebruik de Get-Event
cmdlet om gebeurtenissen in de gebeurteniswachtrij op te halen.
Voorbeelden
Voorbeeld 1: Een PowerShell-engine-gebeurtenis registreren op externe computers
In dit voorbeeld wordt een PowerShell-engine-gebeurtenis geregistreerd op twee externe computers.
$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S {
Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Forward
}
New-PSSession
maakt een door de gebruiker beheerde sessie (PSSession) op elk van de externe computers. De Invoke-Command
cmdlet voert de Register-EngineEvent
opdracht uit in de externe sessies.
Register-EngineEvent
gebruikt de parameter SourceIdentifier om de gebeurtenis te identificeren. De parameter Doorsturen geeft de engine aan dat de gebeurtenissen van de externe sessie naar de lokale sessie moeten worden doorgestuurd.
Voorbeeld 2: Een opgegeven actie ondernemen wanneer de gebeurtenis Afsluiten plaatsvindt
In dit voorbeeld ziet u hoe u kunt uitvoeren om een specifieke actie uit te voeren Register-EngineEvent
wanneer de gebeurtenis PowerShell.Exiting plaatsvindt.
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
Get-History | Export-Clixml $HOME\history.clixml
}
De parameter SupportEvent wordt toegevoegd om het gebeurtenisabonnement te verbergen. Wanneer PowerShell wordt afgesloten, wordt in dit geval de opdrachtgeschiedenis van de afsluitende sessie geëxporteerd naar een XML-bestand in de map van $HOME
de gebruiker.
Voorbeeld 3: Een door de gebruiker gedefinieerde gebeurtenis maken en abonneren
In dit voorbeeld wordt een abonnement gemaakt voor gebeurtenissen uit de bron MyEventSource. Dit is een willekeurige bron die we gaan gebruiken om de voortgang van een taak te controleren. Register-EngineEvent
wordt gebruikt om het abonnement te maken. Het scriptblok voor de actieparameter registreert de gebeurtenisgegevens in een tekstbestand.
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..."
New-Event -SourceIdentifier MyEventSource -Message ("{0} - Work done..." -f (Get-Date))
}
}
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
taak-id 18 gemaakt. Start-Job
taak-id 19 gemaakt. In voorbeeld 4 verwijderen we het gebeurtenisabonnement en de taken en inspecteren we vervolgens het logboekbestand.
Voorbeeld 4: Registratie van gebeurtenissen ongedaan maken en taken opschonen
Dit is een vervolg van voorbeeld 3. In dit voorbeeld wachten we 10 seconden om verschillende gebeurtenissen te laten plaatsvinden. Vervolgens heffen we de registratie van het gebeurtenisabonnement op.
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...
De Unregister-Event
cmdlet stopt de taak die is gekoppeld aan het gebeurtenisabonnement (taak-id 18). Taak-id 19 wordt nog steeds uitgevoerd en er worden nieuwe gebeurtenissen gemaakt. We gebruiken de taak-cmdlets om de taak te stoppen en de overbodige taakobjecten te verwijderen. Get-Content
geeft de inhoud van het logboekbestand weer.
Parameters
-Action
Hiermee geeft u opdrachten voor het afhandelen van de gebeurtenissen. De opdrachten in de actie worden uitgevoerd wanneer een gebeurtenis wordt gegenereerd, in plaats van de gebeurtenis naar de gebeurteniswachtrij te verzenden. Plaats de opdrachten tussen accolades ({}
) om een scriptblok te maken.
De waarde van de parameter Actie kan de $Event
variabelen , $EventSubscriber
, $Sender
en $EventArgs
$Args
automatische variabelen bevatten, die informatie geven over de gebeurtenis aan het actiescriptblok. Zie about_Automatic_Variables voor meer informatie.
Wanneer u een actie opgeeft, Register-EngineEvent
wordt een gebeurtenistaakobject geretourneerd dat die actie vertegenwoordigt. U kunt de taak-cmdlets gebruiken om de gebeurtenistaak te beheren.
Type: | ScriptBlock |
Position: | 101 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Forward
Geeft aan dat de cmdlet gebeurtenissen voor dit abonnement naar de sessie op de lokale computer verzendt. Gebruik deze parameter wanneer u zich registreert voor gebeurtenissen op een externe computer of in een externe sessie.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxTriggerCount
Hiermee geeft u het maximum aantal keren op dat de actie wordt uitgevoerd voor het gebeurtenisabonnement.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MessageData
Hiermee geeft u aanvullende gegevens op die zijn gekoppeld aan de gebeurtenis. De waarde van deze parameter wordt weergegeven in de eigenschap MessageData van het gebeurtenisobject.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SourceIdentifier
Hiermee geeft u de bron-id van de gebeurtenis waarop u zich abonneert. De bron-id moet uniek zijn in de huidige sessie. Deze parameter is vereist.
De waarde van deze parameter wordt weergegeven in de waarde van de eigenschap SourceIdentifier van het abonneeobject en van alle gebeurtenisobjecten die aan dit abonnement zijn gekoppeld.
De waarde is specifiek voor de bron van de gebeurtenis. Dit kan een willekeurige waarde zijn die u hebt gemaakt voor gebruik met de New-Event
cmdlet. De PowerShell-engine ondersteunt de PSEngineEvent-waardenPowerShell.Exiting en PowerShell.OnIdle.
Type: | String |
Position: | 100 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SupportEvent
Geeft aan dat de cmdlet het gebeurtenisabonnement verbergt. Voeg deze parameter toe wanneer het huidige abonnement deel uitmaakt van een complexer mechanisme voor gebeurtenisregistratie en deze niet onafhankelijk mag worden gedetecteerd.
Als u een abonnement wilt weergeven of annuleren dat is gemaakt met de parameter SupportEvent , voegt u de parameter Force toe aan de Get-EventSubscriber
of Unregister-Event
cmdlets.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Invoerwaarden
None
U kunt geen objecten doorsluisen naar deze cmdlet.
Uitvoerwaarden
None
Deze cmdlet retourneert standaard geen uitvoer.
Wanneer u de actieparameter gebruikt, retourneert deze cmdlet een PSEventJob-object .
Notities
Gebeurtenissen, gebeurtenisabonnementen en de gebeurteniswachtrij bestaan alleen in de huidige sessie. Als u de huidige sessie sluit, wordt de gebeurteniswachtrij verwijderd en wordt het gebeurtenisabonnement geannuleerd.
Wanneer u zich abonneert op de afsluitgebeurtenis, zijn de cmdlets die kunnen worden uitgevoerd door de parameter Actie beperkt tot de cmdlets in de modules Microsoft.PowerShell.Core en Microsoft.PowerShell.Utility. De afsluitgebeurtenis wordt alleen geactiveerd wanneer de sessie wordt afgesloten onder beheer van PowerShell. De gebeurtenis wordt niet geactiveerd wanneer de hosttoepassing of het terminalvenster wordt gesloten.
De engine wordt beschouwd als niet-actief als er geen pijplijn wordt uitgevoerd. De OnIdle-gebeurtenis wordt geactiveerd wanneer PowerShell gedurende 300 milliseconden (ms) inactief is geweest.
Notitie
Wanneer PSReadLine wordt gebruikt, wordt de OnIdle-gebeurtenis geactiveerd wanneer ReadKey()
er een time-out optreedt (geen typen in 300 ms). De gebeurtenis kan worden gesignaleerd terwijl de gebruiker zich midden in het bewerken van een opdrachtregel bevindt, bijvoorbeeld de gebruiker leest help om te bepalen welke parameter moet worden gebruikt. Vanaf PSReadLine 2.2.0-beta4 is het OnIdle-gedrag gewijzigd om de gebeurtenis alleen aan te geven als er een ReadKey()
time-out is en de huidige bewerkingsbuffer leeg is.