Register-EngineEvent
Sottoscrive gli eventi generati dal motore di PowerShell e dal cmdlet New-Event.
Sintassi
Default (impostazione predefinita).
Register-EngineEvent
[-SourceIdentifier] <String>
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Descrizione
Il cmdlet Register-EngineEvent sottoscrive gli eventi generati dal motore di PowerShell e dal cmdlet New-Event. Usare il parametro SourceIdentifier per specificare l'evento.
È possibile usare questo cmdlet per sottoscrivere l' OnIdle di
Quando si sottoscrive un evento, alla sessione viene aggiunto un sottoscrittore di eventi. Per ottenere gli abbonati agli eventi nella sessione, usare il cmdlet Get-EventSubscriber. Per annullare la sottoscrizione, usare il cmdlet Unregister-Event che elimina il sottoscrittore dell'evento dalla sessione.
Quando viene generato l'evento sottoscritto, viene aggiunto alla coda di eventi nella tua sessione. Per ottenere eventi nella coda di eventi, utilizzare il cmdlet Get-Event.
Esempio
Esempio 1: Registrare un evento del motore di PowerShell sui computer remoti
Questo esempio registra un evento del motore di PowerShell su due computer remoti.
$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S {
Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PSEngineEvent]::Exiting) -Forward
}
New-PSSession crea una sessione gestita dall'utente (PSSession) in ognuno dei computer remoti. Il cmdlet Invoke-Command esegue il comando Register-EngineEvent nelle sessioni remote.
Esempio 2: Effettuare un'azione specificata quando si verifica l'evento di uscita
In questo esempio viene mostrato come avviare
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
Get-History | Export-Clixml $HOME\history.clixml
}
Il parametro SupportEvent viene aggiunto per nascondere l'iscrizione all'evento. Quando PowerShell esce, in questo caso, la cronologia dei comandi dalla sessione di uscita viene esportata in un file XML nella directory $HOME dell'utente.
Esempio 3: Creare e sottoscrivere un evento definito dall'utente
In questo esempio viene creata una sottoscrizione per gli eventi dall'origine MyEventSource. Si tratta di una fonte arbitraria che verrà usata per monitorare il progresso di un lavoro.
Register-EngineEvent viene usato per creare la sottoscrizione. Il blocco di script per il parametro dell'azione
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..."
$newEventSplat = @{
SourceIdentifier = 'MyEventSource'
MessageData = ("{0} - Work done..." -f (Get-Date))
}
New-Event @newEventSplat
}
}
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 creato Id lavoro 18.
Start-Job ha creato ID lavoro 19. Nell'esempio 4 si rimuovono la sottoscrizione di eventi e i processi, quindi si esamina il file di log.
Esempio 4: Annullare la registrazione degli eventi e pulire i processi
Si tratta di una continuazione dell'esempio 3. In questo esempio, attendiamo 10 secondi per lasciare che si verifichino diversi eventi. Quindi annulliamo l'iscrizione all'evento.
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...
Il cmdlet Unregister-Event arresta l'attività associata all'abbonamento agli eventi (ID attività 18). L'ID lavoro 19 è ancora in esecuzione e sta creando nuovi eventi. I cmdlet di job arrestano il processo di lavoro e rimuovono gli oggetti di lavoro non necessari.
Get-Content visualizza il contenuto del file di log.
Parametri
-Action
Specifica i comandi per gestire gli eventi. I comandi nell'Azione vengono eseguiti direttamente quando viene generato un evento, al posto di inviare l'evento alla coda di eventi. Racchiudi i comandi tra parentesi graffe ({}) per creare un blocco di script.
Il valore del parametro Action può includere le variabili automatiche $Event, $EventSubscriber, $Sender, $EventArgse $args, che forniscono informazioni sull'evento al blocco di script Action. Per altre informazioni, vedere about_Automatic_Variables.
Quando si specifica un'azione, Register-EngineEvent restituisce un oggetto di processo evento che rappresenta tale azione. È possibile utilizzare i cmdlet Job per gestire il job dell'evento.
Proprietà dei parametri
| Tipo: | ScriptBlock |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | 101 |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Forward
Indica che il cmdlet trasmette gli eventi di questa sottoscrizione alla sessione sul computer locale. Usare questo parametro quando si esegue la registrazione per gli eventi in un computer remoto o in una sessione remota.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-MaxTriggerCount
Specifica il numero massimo di volte in cui viene eseguita l'azione per la sottoscrizione di eventi.
Proprietà dei parametri
| Tipo: | Int32 |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-MessageData
Questo parametro fa parte della classe base per tutti i cmdlet Event. Il Register-EngineEvent non usa questo parametro. Tutti i dati passati a questo parametro vengono ignorati.
Proprietà dei parametri
| Tipo: | PSObject |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-SourceIdentifier
Specifica l'identificatore di origine dell'evento a cui si sta sottoscrivendo. L'identificatore di origine deve essere univoco nella sessione corrente. Questo parametro è obbligatorio.
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.
Il valore è specifico dell'origine dell'evento. Può trattarsi di un valore arbitrario creato da usare con il cmdlet New-Event. Il motore di PowerShell supporta i valori PSEngineEvent, PowerShell.Exiting, e PowerShell.OnIdle.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | 100 |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-SupportEvent
Indica che il cmdlet nasconde l'abbonamento agli eventi. Aggiungi questo parametro quando l'abbonamento corrente fa parte di un meccanismo di registrazione di eventi più complesso e non deve essere individuato in modo autonomo.
Per visualizzare o annullare una sottoscrizione creata con il parametro SupportEvent, aggiungere il parametro Force ai cmdlet Get-EventSubscriber o Unregister-Event.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
CommonParameters
Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.
Input
None
Gli oggetti non possono essere inviati tramite pipe a questo cmdlet.
Output
None
Per impostazione predefinita, questo cmdlet non restituisce alcun output.
PSEventJob
Quando si utilizza il parametro Action, questo cmdlet restituisce un oggetto PSEventJob.
Note
Gli eventi, le sottoscrizioni di eventi e la coda di eventi esistono solo nella sessione corrente. Se si chiude la sessione corrente, la coda di eventi viene eliminata e la sottoscrizione di eventi viene annullata.
Quando si sottoscrive l'evento Exiting, i cmdlet che possono essere eseguiti dal parametro Action sono limitati ai cmdlet nei moduli Microsoft.PowerShell.Core e Microsoft.PowerShell.Utility. L'evento Exiting viene attivato solo quando la sessione viene terminata sotto il controllo di PowerShell. L'evento non viene generato quando l'applicazione host o la finestra del terminale viene chiusa.
Il motore è considerato inattivo se non esegue una pipeline. L'evento OnIdle viene generato quando PowerShell è inattiva per 300 millisecondi (millisecondi).
Annotazioni
Quando PSReadLine è in uso, l'evento OnIdle viene generato quando si verifica il timeout di ReadKey() (nessuna digitazione in 300 ms). L'evento può essere segnalato mentre l'utente sta modificando una riga di comando, ad esempio l'utente sta leggendo la Guida per decidere quale parametro usare. A partire da PSReadLine 2.2.0-beta4, il comportamento del OnIdle è stato modificato per segnalare l'evento solo se esiste un timeout ReadKey() e il buffer di modifica corrente è vuoto.