Abonniert die Ereignisse, die von einem Microsoft .NET Framework-Objekt generiert werden.

Syntax

Register-ObjectEvent [-InputObject] <psobject> [-EventName] <string> [[-SourceIdentifier] <string>] [[-Action] <scriptblock>] [-Forward] [-MessageData <psobject>] [-SupportEvent] [<CommonParameters>]

Beschreibung

Mit dem Cmdlet "Register-ObjectEvent" werden Ereignisse abonniert, die von .NET Framework-Objekten auf dem lokalen Computer oder einem Remotecomputer generiert werden.

Wenn das abonnierte Ereignis ausgelöst wird, wird es der Ereigniswarteschlange in der Sitzung hinzugefügt. Verwenden Sie das Cmdlet "Get-Event", um Ereignisse in der Ereigniswarteschlange abzurufen.

Sie können mit den Parametern von Register-ObjectEvent Eigenschaftenwerte für die Ereignisse angeben, mit denen Sie das Ereignis in der Warteschlange leichter identifizieren können. Sie können auch mit dem Action-Parameter Aktionen angeben, die ausgeführt werden sollen, wenn ein abonniertes Ereignis ausgelöst wird, und Sie können mit dem Forward-Parameter Remoteereignisse an die Ereigniswarteschlange in der lokalen Sitzung senden.

Wenn Sie ein Ereignis abonnieren, wird der Sitzung ein Ereignisabonnent hinzugefügt. Verwenden Sie das Cmdlet "Get-EventSubscriber", um die Ereignisabonnenten in der Sitzung abzurufen. Wenn das Abonnement abgebrochen werden soll, verwenden Sie das Cmdlet "Unregister-Event". Hierdurch wird der Ereignisabonnent aus der Sitzung gelöscht.

Parameter

-Action <scriptblock>

Gibt Befehle zum Behandeln der Ereignisse an. Beim Auslösen eines Ereignisses werden die Befehle in der Action ausgeführt, statt das Ereignis an die Ereigniswarteschlange zu senden. Schließen Sie die Befehle in geschweifte Klammern ({}) ein, um einen Skriptblock zu erstellen.

Der Wert des Action-Parameters kann die automatischen Variablen "$Event", "$EventSubscriber", "$Sender", "$SourceEventArgs" und "$SourceArgs" enthalten. Diese stellen Informationen zu dem Ereignis im Action-Skriptblock bereit. Weitere Informationen finden Sie unter "about_Automatic_Variables".

Wenn Sie eine Aktion angeben, gibt Register-ObjectEvent ein Ereignisauftragsobjekt zurück, das diese Aktion darstellt. Sie können die Job-Cmdlets verwenden, um den Ereignisauftrag zu verwalten.

Erforderlich?

false

Position?

102

Standardwert

None.

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-EventName <string>

Gibt das Ereignis an, das Sie abonnieren. Geben Sie den Ereignisnamen ein. Dieser Parameter ist erforderlich.

Der Wert dieses Parameters ist kein Name, den Sie für das Ereignisabonnement auswählen. Es ist der Name eines Ereignisses, das vom .NET Framework-Objekt verfügbar gemacht wird. Beispielsweise verfügt die ManagementEventWatcher-Klasse über Ereignisse mit dem Namen "EventArrived" und "Stopped". Um den Ereignisnamen eines Ereignisses zu suchen, verwenden Sie das Cmdlet "Get-Member".

Erforderlich?

true

Position?

2

Standardwert

keine

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-Forward

Sendet Ereignisse für dieses Abonnement an eine Remotesitzung. Verwenden Sie diesen Parameter, wenn Sie sich auf einem Remotecomputer oder in einer Remotesitzung für Ereignisse registrieren.

Erforderlich?

false

Position?

named

Standardwert

False

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-InputObject <psobject>

Gibt das .NET Framework-Objekt an, das die Ereignisse generiert. Geben Sie eine Variable ein, die das Objekt enthält, oder geben Sie einen Befehl oder einen Ausdruck ein, mit dem das Objekt abgerufen wird. Dieser Parameter ist erforderlich.

Erforderlich?

true

Position?

1

Standardwert

keine

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-MessageData <psobject>

Gibt alle weiteren Daten an, die diesem Ereignisabonnement zugeordnet werden sollen. Der Wert dieses Parameters wird in der MessageData-Eigenschaft aller diesem Abonnement zugeordneten Ereignisse angezeigt.

Erforderlich?

false

Position?

named

Standardwert

keine

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-SourceIdentifier <string>

Gibt einen Namen an, den Sie für das Abonnement auswählen. Der von Ihnen ausgewählte Name muss in der aktuellen Sitzung eindeutig sein. Der Standardwert ist die von Windows PowerShell zugewiesene GUID.

Der Wert dieses Parameters ist im Wert der SourceIdentifier-Eigenschaft des Abonnentenobjekts und aller diesem Abonnement zugeordneten Ereignisobjekte vorhanden.

Erforderlich?

false

Position?

101

Standardwert

GUID

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-SupportEvent

Blendet das Ereignisabonnement aus. Verwenden Sie diesen Parameter, wenn das aktuelle Abonnement Teil eines komplexeren Ereignisregistrierungsmechanismus ist und nicht unabhängig erfasst werden soll.

Um ein Abonnement anzuzeigen oder abzubrechen, das mit dem SupportEvent-Parameter erstellt wurde, verwenden Sie den Force-Parameter der Cmdlets "Get-EventSubscriber" und "Unregister-Event".

Erforderlich?

false

Position?

named

Standardwert

False

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

<CommonParameters>

Dieses Cmdlet unterstützt die folgenden allgemeinen Parameter: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer und -OutVariable. Weitere Informationen finden Sie unter about_Commonparameters.

Eingaben und Ausgaben

Der Eingabetyp ist der Typ der Objekte, die über die Pipeline an das Cmdlet übergeben werden können. Der Rückgabetyp ist der Typ der Objekte, die das Cmdlet zurückgibt.

Eingaben

None

Objekte können nicht über die Pipeline an Register-ObjectEvent übergeben werden.

Ausgaben

None

Dieses Cmdlet generiert keine Ausgabe.

Hinweise

Ereignisse, Ereignisabonnements und die Ereigniswarteschlange sind nur in der aktuellen Sitzung vorhanden. Wenn Sie die aktuelle Sitzung schließen, wird die Ereigniswarteschlange verworfen, und das Ereignisabonnement wird abgebrochen.

Beispiel 1

C:\PS>$query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" 

C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query 

C:\PS> register-objectEvent -inputObject $processWatcher -eventName "EventArrived"

Beschreibung
-----------
In diesem Beispiel werden Ereignisse abonniert, die beim Starten eines neuen Prozesses generiert werden. 

Der Befehl ruft EventArrived-Ereignisse mithilfe des ManagementEventWatcher-Objekts ab. Ein Abfrageobjekt gibt an, dass die Ereignisse Instanzerstellungsereignisse für die Win32_Process-Klasse sind.






Beispiel 2

C:\PS>$query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" 

C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query 

C:\PS> $action = { New-Event "PowerShell.ProcessCreated" -Sender $sender -EventArguments $SourceEventArgs.NewEvent.TargetInstance } 

C:\PS> register-objectEvent -inputObject $processWatcher -eventName "EventArrived" -action $action

Id    Name            State      HasMoreData     Location             Command
--    ----            -----      -----------     --------             -------
2     422cfe5a-65e... Running    True                                 New-Event "PowerShe...

Beschreibung
-----------
In diesem Beispiel wird das Angeben einer Aktion als Antwort auf ein Ereignis veranschaulicht. Wenn Sie eine Aktion angeben, werden die ausgelösten Ereignisse keiner Ereigniswarteschlange hinzugefügt. Stattdessen reagiert die Aktion auf das Ereignis. 

In diesem Beispiel wird ein neues ProcessCreated-Ereignis ausgelöst, wenn ein Instanzerstellungsereignis ausgelöst wird, das angibt, dass ein neuer Prozess gestartet wurde.

Die Aktion verwendet die automatische Variable "$Sender" und "$SourceEventArgs", die nur für Ereignisaktionen aufgefüllt werden. 

Mit dem Befehl "Register-ObjectEvent" wird ein Auftragsobjekt zurückgegeben, das die als Hintergrundauftrag ausgeführte Aktion darstellt. Sie können den Hintergrundauftrag mit den Job-Cmdlets, z. B. Get-Job und Receive-Job, verwalten. 

Weitere Informationen finden Sie unter "about_Jobs".






Beispiel 3

C:\PS>$s = new-pssession -computername Server01, Server02

C:\PS> invoke-command -session $s -filepath ProcessCreationEvent.ps1

C:\PS> invoke-command -session $s { get-event }

# ProcessCreationEvent.ps1

function Enable-ProcessCreationEvent 
{ 
   $query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", ` 
       (New-Object 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

Beschreibung
-----------
In diesem Beispiel wird gezeigt, wie Objektereignisse auf Remotecomputern abonniert werden.

Im ersten Befehl werden PSSessions auf zwei Remotecomputern erstellt und in der Variablen "$s" gespeichert.

Im zweiten Befehl wird das Skript "ProcessCreationEvent.ps1" mithilfe des FilePath-Parameters des Cmdlet "Invoke-Command" in jeder PSSession in $s ausgeführt. 

Das Skript enthält den Befehl "Register-ObjectEvent", mit dem Instanzerstellungsereignisse für das Win32_Process-Objekt über das ManagementEventWatcher-Objekt und das zugehörige EventArrived-Ereignis abonniert werden.






Beispiel 4

C:\PS>$timer  = New-Object Timers.Timer

C:\PS> $timer.Interval = 500

C:\PS> $job = Register-ObjectEvent -inputObject $timer -eventName Elapsed -sourceIdentifier Timer.Random -Action {$random = Get-Random -Min 0 -Max 100}

C:\PS> $job.gettype().fullname
System.Management.Automation.PSEventJob

C:\PS> $job | format-list -property *

State         : Running
Module        : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
StatusMessage :
HasMoreData   : True
Location      :
Command       : $random = Get-Random -Min 0 -Max 100
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 88944290-133d-4b44-8752-f901bd8012e2
Id            : 1
Name          : Timer.Random
ChildJobs     : {}
...

C:\PS> $timer.Enabled = $true

C:\PS> & $job.module {$random}
60

C:\PS> & $job.module {$random}
47

Beschreibung
-----------
In diesem Beispiel wird veranschaulicht, wie das dynamische Modul im PSEventJob-Objekt verwendet wird, das beim Einschließen einer Aktion in eine Ereignisregistrierung erstellt wird.

Der erste Befehl erstellt mit dem Cmdlet "New-Object" ein Zeitgeberobjekt. Mit dem zweiten Befehl wird das Intervall des Zeitgebers auf 500 (Millisekunden) festgelegt.

Mit dem dritten Befehl wird das Cmdlet "Register-ObjectEvent" verwendet, um das Elapsed-Ereignis des Zeitgeberobjekts zu registrieren. Der Befehl schließt eine Aktion ein, die das Ereignis behandelt. Jedes Mal, wenn das Zeitgeberintervall abläuft, wird ein Ereignis ausgelöst und die Befehle in der Aktion ausgeführt. In diesem Fall generiert das Cmdlet "Get-Random" eine Zufallszahl zwischen 0 und 100 und speichert sie in der Variablen "$random".

Wenn Sie in einem Register-ObjectEvent-Befehl einen Action-Parameter verwenden, gibt der Befehl ein PSEventJob-Objekt zurück, das die Aktion darstellt. Mit dem Befehl wird das Auftragsobjekt in der Variablen "$job" gespeichert.

Das PSEventJob-Objekt, das vom Cmdlet "Register-ObjectEvent" zurückgegeben wird, ist auch in der Action-Eigenschaft des Ereignisabonnenten verfügbar. Weitere Informationen finden Sie unter "Get-EventSubscriber".

Der vierte Befehl zeigt, dass die Variable "$job" ein PSEventJob-Objekt enthält. Mit dem fünften Befehl wird das Cmdlet "Format-List" verwendet, um alle Eigenschaften des PSEventJob-Objekts in einer Liste anzuzeigen. 

PSEventJob verfügt über eine Module-Eigenschaft, die ein dynamisches Skriptmodul enthält, das die Aktion implementiert.

Mit dem sechsten Befehl wird der Zeitgeber aktiviert.

In den verbleibenden Befehlen wird der Aufrufoperator (&) verwendet, um den Befehl im Modul aufzurufen und den Wert der Variablen "$random" anzuzeigen. Sie können den Aufrufoperator verwenden, um einen beliebigen Befehl im Modul aufzurufen, einschließlich nicht exportierter Befehle. In diesem Fall zeigen die Befehle die Zufallsnummer an, die bei Auftreten des Elapsed-Ereignisses generiert wird.

Weitere Informationen zu Modulen finden Sie unter "about_Modules".






Siehe auch




Inhaltsverzeichnis