Register-ObjectEvent

Feliratkozik a Microsoft .NET-keretrendszer objektum által létrehozott eseményekre.

Syntax

Register-ObjectEvent
        [-InputObject] <PSObject>
        [-EventName] <String>
        [[-SourceIdentifier] <String>]
        [[-Action] <ScriptBlock>]
        [-MessageData <PSObject>]
        [-SupportEvent]
        [-Forward]
        [-MaxTriggerCount <Int32>]
        [<CommonParameters>]

Description

A Register-ObjectEvent parancsmag feliratkozik a helyi számítógépen vagy egy távoli számítógépen futó .NET-objektumok által létrehozott eseményekre.

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.

A paraméterekkel Register-ObjectEvent megadhatja az események tulajdonságértékeit, amelyek segíthetnek azonosítani az eseményt az üzenetsorban. A Művelet paraméterrel megadhatja azokat a műveleteket is, amelyeket egy előfizetett esemény létrehozásakor hajthat végre, és a Továbbítás paraméterrel távoli eseményeket küldhet az eseménysorba a helyi munkamenetben.

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.

Példák

1. példa: Feliratkozás eseményekre új folyamat indításakor

Ez a példa előfizet egy új folyamat indításakor létrehozott eseményekre.

A parancs a ManagementEventWatcher objektumot használja az EventArrived események lekéréséhez. A lekérdezési objektum azt határozza meg, hogy az események a Win32_Process osztály példánylétrehozó eseményei.

$queryParameters = '__InstanceCreationEvent', (New-Object TimeSpan 0,0,1),
    "TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query
Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"

2. példa: Eseményre válaszoló művelet megadása

Művelet megadásakor a rendszer nem adja hozzá a létrehozott eseményeket az eseménysorhoz. Ehelyett a művelet válaszol az eseményre. Ebben a példában, amikor egy példánylétrehozási eseményt hoz létre, amely azt jelzi, hogy egy új folyamat indul el, egy új ProcessCreated esemény jön létre.

$queryParameters = '__InstanceCreationEvent', (New-Object TimeSpan 0,0,1),
    "TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $query
$newEventArgs = @{
    SourceIdentifier = 'PowerShell.ProcessCreated'
    Sender = $Sender
    EventArguments = $EventArgs.NewEvent.TargetInstance
}
$Action = { New-Event @newEventArgs }
Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action

Id   Name               PSJobTypeName   State       HasMoreData   Location   Command
--   ----               -------------   -----       -----------   --------   -------
 5   3db2d67a-efff-...                 NotStarted   False                    New-Event @newEventArgs

A művelet azokat az $Sender$EventArgs automatikus változókat használja, amelyek csak eseményműveletekhez vannak feltöltve.

A Register-ObjectEvent parancs egy feladatobjektumot ad vissza, amely a műveletet jelöli, amely háttérfeladatként fut. A háttérfeladat kezeléséhez használhatja a Feladat parancsmagokat, például Get-Job az és Receive-Joba parancsmagokat. További információkért lásd a feladatokat ismertető szakaszt.

3. példa: Feliratkozás távoli számítógépek objektumeseményeire

Ez a példa bemutatja, hogyan iratkozhat fel objektumeseményekre távoli számítógépeken. Ez a példa a Enable-ProcessCreationEvent szkriptfájlban definiált függvényt ProcessCreationEvent.ps1 használja. Ez a szkript a példában szereplő összes számítógép számára elérhető.

# ProcessCreationEvent.ps1
function  Enable-ProcessCreationEvent {
    $queryParameters = "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1),
        "TargetInstance isa 'Win32_Process'"
    $Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters

    $objectEventArgs = @{
        Input = New-Object System.Management.ManagementEventWatcher $Query
        EventName = 'EventArrived'
        SourceIdentifier = 'WMI.ProcessCreated'
        MessageData = 'Test'
        Forward = $True
    }
    Register-ObjectEvent @objectEventArgs
}

$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1
Invoke-Command -Session $S { Enable-ProcessCreationEvent }

Az első két távoli számítógépen hozunk létre PSSessions-t , és mentjük őket a $S változóba. Ezután a Invoke-Command parancsmag futtatja a ProcessCreationEvent.ps1 szkriptet az egyes PSSessions in $S. Ez a művelet létrehozza a függvényt Enable-ProcessCreationEvent a távoli munkamenetekben. Végül a függvényt a Enable-ProcessCreationEvent távoli munkamenetekben futtatjuk.

A függvény tartalmaz egy Register-ObjectEvent parancsot, amely feliratkozik a példánylétrehozás eseményeire az Win32_Process objektumon a ManagementEventWatcher objektumon és annak EventArrived eseményén keresztül.

4. példa: A dinamikus modul használata a P Standard kiadás ventJob objektumban

Ez a példa bemutatja, hogyan használhatja a dinamikus modult a P Standard kiadás ventJob objektumban, amely akkor jön létre, amikor művelet szerepel egy eseményregisztrációban. Először létrehozunk és engedélyezünk egy időzítőobjektumot, majd az időzítő intervallumát 500-ra (ezredmásodpercre) állítjuk. A Register-ObjectEvent parancsmag regisztrálja az időzítőobjektum eltelt eseményét. A P Standard kiadás ventJob objektumot a rendszer a $Job változóba menti, és az esemény-előfizető Művelet tulajdonságában is elérhető. További információ: Get-EventSubscriber.

Amikor az időzítő időköze el nem telik, a rendszer eseményt indít el, és végrehajtja a műveletet. Ebben az esetben a Get-Random parancsmag véletlenszerű számot hoz létre 0 és 100 között, és menti a $Random változóba.

$Timer = New-Object Timers.Timer
$Timer.Interval = 500
$Timer.Enabled = $True
$objectEventArgs = @{
    InputObject = $Timer
    EventName = 'Elapsed'
    SourceIdentifier = 'Timer.Random'
    Action = {$Random = Get-Random -Min 0 -Max 100}
}
$Job = Register-ObjectEvent @objectEventArgs
$Job | Format-List -Property *
& $Job.module {$Random}
& $Job.module {$Random}

State         : Running
Module        : __DynamicModule_53113769-31f2-42dc-830b-8749325e28d6
StatusMessage :
HasMoreData   : True
Location      :
Command       : $Random = Get-Random -Min 0 -Max 100
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 47b5ec9f-bfe3-4605-860a-4674e5d44ca8
Id            : 7
Name          : Timer.Random
ChildJobs     : {}
PSBeginTime   : 6/27/2019 10:19:06 AM
PSEndTime     :
PSJobTypeName :
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
Information   : {}
60
47

A P Standard kiadás ventJob modultulajdonság egy dinamikus szkriptmodult tartalmaz, amely implementálja a műveletet. A hívó operátor (&) használatával meghívjuk a modul parancsát a változó értékének $Random megjelenítéséhez.

A modulokkal kapcsolatos további információkért lásd: about_Modules.

Paraméterek

-Action

Megadja az esemény kezelésére vonatkozó parancsokat. 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. Ezek a változók információkat nyújtanak az eseményről a Műveleti szkript blokknak. További információ: about_Automatic_Variables.

Ha megad egy műveletet, Register-ObjectEvent 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

-EventName

Azt az eseményt adja meg, amelyre feliratkozik.

Ennek a paraméternek az értéke annak az eseménynek a neve, amelyet a .NET-objektum elérhetővé tesz. A ManagementEventWatcher osztály például EventArrived és Stop nevű eseményekkel rendelkezik. Az esemény eseménynevének megkereséséhez használja a Get-Member parancsmagot.

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Forward

Azt jelzi, hogy a parancsmag egy távoli munkamenetbe küldi az előfizetés eseményeit. 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

-InputObject

Megadja az eseményeket létrehozó .NET-objektumot. Adjon meg egy változót, amely tartalmazza az objektumot, vagy írjon be egy parancsot vagy kifejezést, amely lekéri az objektumot.

Type:PSObject
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-MaxTriggerCount

Megadja, hogy egy esemény legfeljebb hány alkalommal aktiválható.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MessageData

Megadja az esemény-előfizetéshez társítandó további adatokat. Ennek a paraméternek az értéke az előfizetéshez társított összes esemény 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 az előfizetéshez kiválasztott nevet. A kiválasztott névnek egyedinek kell lennie az aktuális munkamenetben. Az alapértelmezett érték a PowerShell által hozzárendelt GUID.

Ennek a paraméternek az értéke az előfizetői objektum SourceIdentifier tulajdonságában és az előfizetéshez társított összes eseményobjektumban jelenik meg.

Type:String
Position:100
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SupportEvent

Azt jelzi, hogy a parancsmag elrejti az esemény-előfizetést. Ezt a paramétert akkor használja, 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 használja a parancsmagok Kényszerítése paraméterét Get-EventSubscriberUnregister-Event.

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.

PSEventJob

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.