Sottoscrive gli eventi generati da un oggetto Microsoft .NET Framework.

Sintassi

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

Descrizione

Il cmdlet Register-ObjectEvent sottoscrive eventi generati da oggetti .NET Framework nel computer locale o in un computer remoto.

Quando viene generato, l'evento sottoscritto viene aggiunto alla coda degli eventi nella sessione. Per ottenere eventi nella coda degli eventi, utilizzare il cmdlet Get-Event.

È possibile utilizzare i parametri di Register-ObjectEvent per specificare i valori delle proprietà degli eventi che agevolano l'individuazione dell'evento nella coda. È inoltre possibile utilizzare anche il parametro Action per specificare le azioni da eseguire quando viene generato un evento sottoscritto e il parametro Forward per inviare eventi remoti alla coda degli eventi nella sessione locale.

Quando si sottoscrive un evento, un sottoscrittore di eventi viene aggiunto alla sessione. Per ottenere i sottoscrittori di eventi nella sessione, utilizzare il cmdlet Get-EventSubscriber. Per annullare la sottoscrizione, utilizzare il cmdlet Unregister-Event che elimina il sottoscrittore di eventi dalla sessione.

Parametri

-Azione <scriptblock>

Specifica i comandi per la gestione degli eventi. I comandi in Action vengono eseguiti quando viene generato un evento, anziché inviare l'evento alla coda degli eventi. Racchiudere i comandi tra parentesi graffe ( { } ) per creare un blocco di script.

Il valore del parametro Action può includere le variabili automatiche $Event, $EventSubscriber, $Sender, $SourceEventArgs e $SourceArgs che forniscono informazioni sull'evento al blocco di script di Action. Per ulteriori informazioni, vedere about_Automatic_Variables.

Quando si specifica un'azione, Register-ObjectEvent restituisce un oggetto processo evento che rappresenta tale azione. È possibile utilizzare i cmdlet Job per gestire il processo evento.

Obbligatorio?

false

Posizione?

102

Valore predefinito

None.

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-EventName <string>

Specifica l'evento sottoscritto. Immettere il nome dell'evento. Questo parametro è obbligatorio.

Il valore di questo parametro non è un nome che si seleziona per la sottoscrizione di eventi, ma il nome di un evento esposto dall'oggetto .NET Framework. Ad esempio, la classe ManagementEventWatcher dispone di eventi denominati "EventArrived" e "Stopped". Per trovare il nome di un evento, utilizzare il cmdlet Get-Member.

Obbligatorio?

true

Posizione?

2

Valore predefinito

nessuno

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Forward

Invia eventi per questa sottoscrizione a una sessione remota. Utilizzare questo parametro durante la registrazione di eventi in un computer remoto o in una sessione remota.

Obbligatorio?

false

Posizione?

named

Valore predefinito

False

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-InputObject <psobject>

Specifica l'oggetto .NET Framework che genera gli eventi. Immettere una variabile che contiene l'oggetto oppure digitare un comando o un'espressione che consente di ottenere l'oggetto. Questo parametro è obbligatorio.

Obbligatorio?

true

Posizione?

1

Valore predefinito

nessuno

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-MessageData <psobject>

Specifica qualsiasi dato aggiuntivo associato a questa sottoscrizione di evento. Il valore di questo parametro viene visualizzato nella proprietà MessageData di tutti gli eventi associati a questa sottoscrizione.

Obbligatorio?

false

Posizione?

named

Valore predefinito

nessuno

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-SourceIdentifier <string>

Specifica un nome selezionato per la sottoscrizione. Il nome selezionato deve essere univoco nella sessione corrente. Il valore predefinito è il GUID assegnato da Windows PowerShell.

Il valore di questo parametro viene visualizzato nel valore della proprietà SourceIdentifier dell'oggetto sottoscrittore e di tutti gli oggetti evento associati a questa sottoscrizione.

Obbligatorio?

false

Posizione?

101

Valore predefinito

GUID

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-SupportEvent

Nasconde la sottoscrizione di eventi. Utilizzare questo parametro quando la sottoscrizione corrente fa parte di un meccanismo di registrazione eventi più complesso e non deve essere individuata separatamente.

Per visualizzare o annullare una sottoscrizione creata con il parametro SupportEvent, utilizzare il parametro Force dei cmdlet Get-EventSubscriber e Unregister-Event.

Obbligatorio?

false

Posizione?

named

Valore predefinito

False

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

<CommonParameters>

Questo cmdlet supporta i parametri comuni -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Per ulteriori informazioni, vedere about_Commonparameters.

Input e output

Il tipo di input è il tipo degli oggetti che è possibile reindirizzare al cmdlet. Il tipo restituito è il tipo degli oggetti restituiti dal cmdlet.

Input

Nessuno

Non è possibile reindirizzare oggetti a Register-ObjectEvent.

Output

Nessuno

Questo cmdlet non genera alcun output.

Note

Gli eventi, le sottoscrizioni di eventi e la coda degli eventi esistono solo nella sessione corrente. Se si chiude la sessione corrente, la coda degli eventi viene eliminata e la sottoscrizione di eventi viene annullata.

Esempio 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"

Descrizione
-----------
In questo esempio vengono sottoscritti gli eventi generati all'avvio di un nuovo processo. 

Il comando utilizza l'oggetto ManagementEventWatcher per ottenere eventi EventArrived. Un oggetto query specifica che gli eventi sono eventi di creazione di istanze per la classe Win32_Process.






Esempio 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...

Descrizione
-----------
In questo esempio viene illustrato come specificare un'azione per rispondere a un evento. Quando si specifica un'azione, gli eventi generati non vengono aggiunti alla coda eventi. Al contrario, l'azione risponde all'evento. 

In questo esempio, quando viene generato un evento di creazione di istanze che indica l'avvio di un nuovo processo, viene generato un nuovo evento ProcessCreated.

L'azione utilizza le variabili automatiche $Sender e $SourceEventArgs compilate solo per le azioni dell'evento. 

Il comando Register-ObjectEvent restituisce un oggetto processo che rappresenta l'azione e viene eseguito come un processo in background. È possibile utilizzare i cmdlet Job, ad esempio Get-Job e Receive-Job, per gestire il processo in background. 

Per ulteriori informazioni, vedere about_Jobs.






Esempio 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

Descrizione
-----------
In questo esempio viene illustrato come sottoscrivere eventi oggetto in computer remoti.

Il primo comando crea sessioni PSSession nei due computer remoti e le salva nella variabile $s.

Nel secondo comando viene utilizzato il parametro FilePath del cmdlet Invoke-Command per eseguire lo script ProcessCreationEvent.ps1 in ciascuna sessione PSSession in $s. 

Lo script include un comando Register-ObjectEvent che sottoscrive eventi di creazione di istanze nell'oggetto Win32_Process tramite l'oggetto ManagementEventWatcher e il relativo evento EventArrived.






Esempio 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

Descrizione
-----------
In questo esempio viene illustrato come utilizzare il modulo dinamico nell'oggetto PSEventJob creato quando si include un'azione in una registrazione eventi.

Nel primo comando viene utilizzato il cmdlet New-Object per creare un oggetto timer. Nel secondo comando viene impostato l'intervallo del timer su 500 (millisecondi).

Nel terzo comando viene utilizzato il cmdlet Register-ObjectEvent per registrare l'evento Elapsed dell'oggetto timer. Il comando include un'azione che gestisce l'evento. Quando l'intervallo del timer è trascorso, viene generato un evento e vengono eseguiti i comandi nell'azione. In questo caso, il cmdlet Get-Random genera un numero casuale compreso tra 0 e 100 e lo salva nella variabile $random.

Quando si utilizza un parametro Action in un comando Register-ObjectEvent, il comando restituisce un oggetto PSEventJob che rappresenta l'azione. Il comando consente di salvare l'oggetto processo nella variabile $job.

L'oggetto PSEventJob restituito dal cmdlet Register-ObjectEvent è anche disponibile nella proprietà Action del sottoscrittore di eventi. Per ulteriori informazioni, vedere Get-EventSubscriber.

Nel quarto comando viene illustrato che la variabile $job contiene un oggetto PSEventJob. Nel quinto comando viene utilizzato il cmdlet Format-List per visualizzare in un elenco tutte le proprietà dell'oggetto PSEventJob. 

PSEventJob dispone di una proprietà Module in cui è contenuto un modulo di script dinamico che implementa l'azione.

Nel sesto comando viene attivato il timer.

Nei comandi rimanenti viene utilizzano l'operatore di chiamata (&) per richiamare il comando nel modulo e visualizzare il valore della variabile $random. È possibile utilizzare l'operatore di chiamata per richiamare qualsiasi comando in un modulo, inclusi i comandi non esportati. In questo caso, nei comandi viene visualizzato il numero casuale che viene generato quando si verifica l'evento Elapsed.

Per ulteriori informazioni sui moduli, vedere about_Modules.






Vedere anche




Argomenti della Guida