Register-WmiEvent

Sottoscrive un evento di Strumentazione gestione Windows (WMI).

Sintassi

Register-WmiEvent
        [-Namespace <String>]
        [-Credential <PSCredential>]
        [-ComputerName <String>]
        [-Class] <String>
        [-Timeout <Int64>]
        [[-SourceIdentifier] <String>]
        [[-Action] <ScriptBlock>]
        [-MessageData <PSObject>]
        [-SupportEvent]
        [-Forward]
        [-MaxTriggerCount <Int32>]
        [<CommonParameters>]
Register-WmiEvent
        [-Namespace <String>]
        [-Credential <PSCredential>]
        [-ComputerName <String>]
        [-Query] <String>
        [-Timeout <Int64>]
        [[-SourceIdentifier] <String>]
        [[-Action] <ScriptBlock>]
        [-MessageData <PSObject>]
        [-SupportEvent]
        [-Forward]
        [-MaxTriggerCount <Int32>]
        [<CommonParameters>]

Descrizione

Il Register-WmiEvent cmdlet sottoscrive gli eventi di Strumentazione gestione Windows (WMI) nel computer locale o in un computer remoto.

Quando viene generato l'evento WMI sottoscritto, viene aggiunto alla coda degli eventi nella sessione locale anche se l'evento si verifica in un computer remoto. Per ottenere eventi nella coda di eventi, usare il Get-Event cmdlet .

È possibile usare i parametri di Register-WmiEvent per sottoscrivere gli eventi nei computer remoti e per specificare i valori delle proprietà degli eventi che consentono di identificare l'evento nella coda. È anche possibile usare il parametro Action per specificare le azioni da eseguire quando viene generato un evento sottoscritto.

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

Nuovi cmdlet CIM (Common Information Model), introdotti in Windows PowerShell 3.0, eseguono le stesse attività dei cmdlet WMI. I cmdlet CIM sono conformi agli standard WS-Management (WSMan) e allo standard CIM, che consente ai cmdlet di usare le stesse tecniche per gestire i computer che eseguono il sistema operativo Windows e quelli che eseguono altri sistemi operativi. Invece di usare Register-WmiEvent, è consigliabile usare il cmdlet Register-CimIndicationEvent .

Esempio

Esempio 1: Sottoscrivere eventi generati da una classe

Questo comando sottoscrive gli eventi generati dalla classe Win32_ProcessStartTrace . Questa classe genera un evento ogni volta che viene avviato un processo.

Register-WmiEvent -Class 'Win32_ProcessStartTrace' -SourceIdentifier "ProcessStarted"

Esempio 2: Sottoscrivere eventi di creazione per un processo

Questo comando usa una query per sottoscrivere gli eventi di creazione istanze di Win32_process.

$wmiParameters = @{
  Query = "select * from __instancecreationevent within 5 where targetinstance isa 'win32_process'"
  SourceIdentifier = "WMIProcess"
  MessageData = "Test 01"
  TimeOut = 500
}
Register-WmiEvent @wmiParameters

Esempio 3: Usare un'azione per rispondere a un evento

Questo esempio illustra come usare un'azione per rispondere a un evento. In questo caso, all'avvio di un processo, tutti Start-Process i comandi nella sessione corrente vengono scritti in un file XML.

$action = { Get-History | where { $_.commandline -like "*start-process*" } | export-cliXml "commandHistory.clixml" }
Register-WmiEvent -Class 'Win32_ProcessStartTrace' -SourceIdentifier "ProcessStarted" -Action $action

Id    Name            State      HasMoreData   Location  Command
--    ----            -----      -----------   --------  -------
1     ProcessStarted  NotStarted False                   get-history | where {...

Quando si usa il parametro Action , Register-WmiEvent restituisce un processo in background che rappresenta l'azione dell'evento. È possibile usare i cmdlet job , ad esempio Get-Job e Receive-Job, per gestire il processo dell'evento.

Per altre informazioni, vedere About Jobs (Informazioni sui processi).

Esempio 4: Eseguire la registrazione per gli eventi in un computer remoto

Questo esempio esegue la registrazione agli eventi nel computer remoto Server01.

Register-WmiEvent -Class 'Win32_ProcessStartTrace' -SourceIdentifier "Start" -Computername Server01
Get-Event -SourceIdentifier "Start"

WMI restituisce gli eventi al computer locale e li archivia nella coda degli eventi nella sessione corrente. Per recuperare gli eventi, eseguire un comando locale Get-Event .

Parametri

-Action

Specifica i comandi che gestiscono gli eventi. I comandi nel parametro Action vengono eseguiti quando viene generato un evento anziché inviare l'evento alla coda di eventi. Racchiudere i comandi tra parentesi graffe ({}) per creare un blocco di script.

Il valore di Action può includere le $Eventvariabili automatiche , $Sender$EventSubscriber, $EventArgs, e $Args , che forniscono informazioni sull'evento al blocco script Action. Per altre informazioni, vedere about_Automatic_Variables.

Quando si specifica un'azione, Register-WmiEvent restituisce un oggetto processo evento che rappresenta tale azione. È possibile usare i cmdlet che contengono il sostantivo Job (cmdlet Job ) per gestire il processo dell'evento.

Type:ScriptBlock
Position:101
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Class

Specifica l'evento da sottoscrivere. Immettere la classe WMI che genera gli eventi. In ogni comando è necessario un parametro Class o Query .

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

-ComputerName

Specifica il nome del computer in cui viene eseguito il comando. Il valore predefinito è il computer locale.

Digitare il nome NetBIOS, un indirizzo IP o un nome di dominio completo del computer. Per specificare il computer locale, digitare il nome del computer, un punto (.) o localhost.

Questo parametro non si basa sulla comunicazione remota di Windows PowerShell. È possibile utilizzare il parametro ComputerName anche se il computer non è configurato per eseguire comandi remoti.

Type:String
Aliases:Cn
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Specifica un account utente che dispone delle autorizzazioni per eseguire questa azione. Il valore predefinito è l'utente corrente.

Digitare un nome utente, ad esempio User01 o Domain01\User01, oppure immettere un oggetto PSCredential , ad esempio uno generato dal Get-Credential cmdlet. Se si digita un nome utente, questo cmdlet richiede una password.

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

-Forward

Indica che questo cmdlet invia eventi per questa sottoscrizione alla sessione nel computer locale. Usare questo parametro quando si esegue la registrazione per gli eventi in un computer remoto o in una sessione remota.

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

-MaxTriggerCount

Specifica il numero massimo di trigger.

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

-MessageData

Specifica i dati aggiuntivi da associare alla sottoscrizione di eventi. Il valore di questo parametro viene visualizzato nella proprietà MessageData di tutti gli eventi associati a questa sottoscrizione.

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

-Namespace

Specifica lo spazio dei nomi della classe WMI.

Type:String
Aliases:NS
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Query

Specifica una query in WQL (WMI Query Language) che identifica la classe di evento WMI, ad esempio : select * from __InstanceDeletionEvent.

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

-SourceIdentifier

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.

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

-SupportEvent

Indica che questo cmdlet nasconde la sottoscrizione di eventi. Usare questo parametro quando la sottoscrizione corrente fa parte di un meccanismo di registrazione eventi più complesso e non deve essere individuata in modo indipendente.

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

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

-Timeout

Specifica per quanto tempo Windows PowerShell attende il completamento di questo comando.

Il valore predefinito 0 (zero) indica che non è previsto alcun timeout, per cui l'attesa di Windows PowerShell è illimitata.

Type:Int64
Aliases:TimeoutMSec
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

None

Non è possibile inviare tramite pipe oggetti a questo cmdlet.

Output

None

Questo cmdlet non genera alcun output.

Note

Per usare questo cmdlet in Windows Vista o in una versione successiva del sistema operativo Windows, avviare Windows PowerShell usando l'opzione Esegui come amministratore.

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 rimossa e la sottoscrizione dell'evento viene annullata.