Register-EngineEvent
Feliratkozik a PowerShell-motor és a New-Event
parancsmag által létrehozott eseményekre.
Syntax
Register-EngineEvent
[-SourceIdentifier] <String>
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Description
A Register-EngineEvent
parancsmag feliratkozik a PowerShell-motor és a New-Event
parancsmag által létrehozott eseményekre. Az esemény megadásához használja a SourceIdentifier paramétert.
Ezzel a parancsmaggal feliratkozhat a parancsmag által New-Event
létrehozott OnIdle vagy Kilépés motoreseményekre és eseményekre. Ezeket az eseményeket a rendszer automatikusan hozzáadja az eseménysorhoz a munkamenetben előfizetés nélkül. Az előfizetéssel azonban továbbíthatja az eseményeket, megadhatja az eseményekre reagáló műveletet, és lemondhatja az előfizetést.
Amikor előfizet egy eseményre, a rendszer hozzáad egy esemény-előfizetőt a munkamenethez. Az esemény előfizetőinek a munkamenetben való lekéréséhez használja a Get-EventSubscriber
parancsmagot. Az előfizetés lemondásához használja a Unregister-Event
parancsmagot, amely törli az esemény-előfizetőt a munkamenetből.
Az előfizetett esemény létrehozásakor a rendszer hozzáadja azt az eseménysorhoz a munkamenetben. Ha eseményeket szeretne lekérni az eseménysorba, használja a Get-Event
parancsmagot.
Példák
1. példa: PowerShell-motoresemény regisztrálása távoli számítógépeken
Ez a példa egy PowerShell-motoreseményre regisztrál két távoli számítógépen.
$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S {
Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Forward
}
New-PSSession
minden távoli számítógépen létrehoz egy felhasználó által felügyelt munkamenetet (PSSession). A Invoke-Command
parancsmag a Register-EngineEvent
távoli munkamenetekben futtatja a parancsot.
Register-EngineEvent
A SourceIdentifier paraméter használatával azonosítja az eseményt. A Továbbítás paraméter azt mondja meg a motornak, hogy a távoli munkamenetből a helyi munkamenetbe továbbítja az eseményeket.
2. példa: Adott művelet végrehajtása a kilépési esemény bekövetkezésekor
Ez a példa bemutatja, hogyan futtatható Register-EngineEvent
egy adott művelet végrehajtása a PowerShell.Exiting esemény bekövetkezésekor .
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
Get-History | Export-Clixml $HOME\history.clixml
}
A SupportEvent paraméter hozzáadva az esemény-előfizetés elrejtéséhez. Amikor a PowerShell kilép, ebben az esetben a kilépési munkamenet parancselőzményei egy XML-fájlt exportálnak a felhasználó könyvtárába $HOME
.
3. példa: Felhasználó által meghatározott esemény létrehozása és előfizetése
Ez a példa létrehoz egy előfizetést az eseményekhez a MyEventSource forrásból. Ez egy tetszőleges forrás, amelyet egy feladat előrehaladásának figyelésére fogunk használni. Register-EngineEvent
az előfizetés létrehozásához használható. A Művelet paraméter szkriptblokkja egy szövegfájlba naplózza az eseményadatokat.
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
létrehozott feladatazonosító: 18. Start-Job
létrehozott feladatazonosító: 19. A 4. példában eltávolítjuk az esemény-előfizetést és a feladatokat, majd megvizsgáljuk a naplófájlt.
4. példa: Események regisztrációja és feladatok törlése
Ez a 3. példa folytatása. Ebben a példában 10 másodpercig várunk, hogy több esemény is bekövetkezjön. Ezután megszüntetjük az esemény-előfizetés regisztrációját.
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...
A Unregister-Event
parancsmag leállítja az esemény-előfizetéshez társított feladatot (feladatazonosító: 18). A 19-s feladatazonosító továbbra is fut, és új eseményeket hoz létre. A Feladat parancsmagokkal állítjuk le a feladatot, és eltávolítjuk a szükségtelen feladatobjektumokat. Get-Content
megjeleníti a naplófájl tartalmát.
Paraméterek
-Action
Az események kezelésére vonatkozó parancsokat adja meg. A művelet parancsai esemény létrehozásakor futnak, ahelyett, hogy az eseményt az eseménysorba küldik. A parancsokat kapcsos zárójelekbe ({}
) ágyazva hozzon létre egy szkriptblokkot.
A Művelet paraméter értéke a , $EventSubscriber
, $Sender
, $EventArgs
és $Args
automatikus változókat is tartalmazhat$Event
, amelyek információt nyújtanak az eseményről a Művelet szkriptblokkban. További információ: about_Automatic_Variables.
Ha megad egy műveletet, Register-EngineEvent
egy eseményfeladat-objektumot ad vissza, amely az adott műveletet jelöli. A Feladat parancsmagokkal kezelheti az eseményfeladatot.
Type: | ScriptBlock |
Position: | 101 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Forward
Azt jelzi, hogy a parancsmag eseményeket küld az előfizetéshez a helyi számítógépen található munkamenetnek. Ezt a paramétert akkor használja, ha távoli számítógépen vagy távoli munkamenetben regisztrál eseményekre.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxTriggerCount
Megadja a művelet végrehajtásának maximális számát az esemény-előfizetésben.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MessageData
Az eseményhez társított további adatokat adja meg. Ennek a paraméternek az értéke az eseményobjektum MessageData tulajdonságában jelenik meg.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SourceIdentifier
Megadja annak az eseménynek a forrásazonosítóját, amelyre feliratkozik. A forrásazonosítónak egyedinek kell lennie az aktuális munkamenetben. Ez a paraméter kötelező.
Ennek a paraméternek az értéke az előfizető objektum SourceIdentifier tulajdonságának és az előfizetéshez társított összes eseményobjektumnak az értékében jelenik meg.
Az érték az esemény forrására jellemző. Ez tetszőleges érték lehet, amelyet a New-Event
parancsmaggal való használatra hozott létre. A PowerShell-motor támogatja a P Standard kiadás ngineEvent powershell.exiting és PowerShell.OnIdle értékeit.
Type: | String |
Position: | 100 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SupportEvent
Azt jelzi, hogy a parancsmag elrejti az esemény-előfizetést. Adja hozzá ezt a paramétert, ha az aktuális előfizetés egy összetettebb eseményregisztrációs mechanizmus része, és nem szabad egymástól függetlenül felderíteni.
A SupportEvent paraméterrel létrehozott előfizetés megtekintéséhez vagy lemondásához adja hozzá a Force paramétert a Get-EventSubscriber
Unregister-Event
parancsmagokhoz.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Bevitelek
None
Ehhez a parancsmaghoz nem lehet objektumokat csövezni.
Kimenetek
None
Ez a parancsmag alapértelmezés szerint nem ad vissza kimenetet.
A Művelet paraméter használatakor ez a parancsmag egy P Standard kiadás ventJob objektumot ad vissza.
Jegyzetek
Az események, az esemény-előfizetések és az eseménysor csak az aktuális munkamenetben léteznek. Ha bezárja az aktuális munkamenetet, a rendszer elveti az eseménysort, és megszakítja az esemény-előfizetést.
A Kilépési eseményre való feliratkozáskor a Művelet paraméter által végrehajtható parancsmagok a Microsoft.PowerShell.Core és a Microsoft.PowerShell.Utility modulok parancsmagjaira korlátozódnak. A kilépési esemény csak akkor aktiválódik, ha a munkamenet a PowerShell felügyelete alatt van. Az esemény nem aktiválódik a gazdaalkalmazás vagy a terminálablak bezárásakor.
A motor tétlennek minősül, ha nem futtat folyamatot. Az OnIdle esemény akkor aktiválódik, ha a PowerShell 300 ezredmásodperc (ms) tétlen volt.
Feljegyzés
Ha a PSReadLine használatban van, az OnIdle esemény akkor aktiválódik, amikor ReadKey()
túllépi az időkorlátot (nincs gépelés 300 ms-ben). Az esemény jelezhető, miközben a felhasználó a parancssor szerkesztésének közepén van, például a felhasználó súgót olvas a használni kívánt paraméter kiválasztásához. A PSReadLine 2.2.0-beta4 verziótól kezdve az OnIdle viselkedése úgy változott, hogy csak időtúllépés esetén ReadKey()
jelezzen, és az aktuális szerkesztőpuffer üres.