PowerShell事件:[0]总述

1.PowerShell事件处理通常有三个步骤:发布事件、订阅事件、处理事件

2.PowerShell事件相关的命令有:

  • Register-ObjectEvent
  • Register-EngineEvent
  • Register-WmiEvent
  • Register-CimIndicationEvent
  • Unregister-Event
  • Get-Event
  • New-Event
  • Remove-Event
  • Wait-Event
  • Get-EventSubscriber

【1】通过Net-Event发布事件,此命令发布的事件都是EngineEvent,可通过Register-EngineEvent命令来订阅,相关要发送给处理程序的参数可在此命令中指定

【2】前面四个以Register开始,以Event结束的命令都是用来订阅事件的命令,第五个是用来取消订阅的命令

【3】可以通过Get-EventSubscriber来获取已经建立的事件订阅者对象,就是Register-*Event被执行后返回的对象

【4】如果订阅事件时,没有指定Action参数,那么当被订阅的事件被触发时,事件信息会作为一个对象存入PowerShell事件队列,你可以通过Get-Event命令获取特定的事件的事件信息对象,也可以通过Remove-Event命令来从事件队列中移除事件对象,你也可以通过Wait-Event命令来等待某种事件的发生,此时脚本会阻塞挂起

【5】如果订阅事件时,指定了Action参数,那么事件被触发后,事件信息会以一系列自动变量,打包给Action参数指定的ScriptBlock,该ScriptBlock可以有返回值,也可以没有,你可以通过该订阅命令返回的订阅对象(比如$es)来访问,该ScriptBlock的返回值:$es.Action.Output,即包含该ScriptBlock的所有返回值

【6】EngineEvent除了内置的三种事件源,就是来自用户通过New-Event自定义的事件了,除了这些你自定义的事件外,其它三种事件源集合的事件的触发都不是你能决定的,你只能订阅它们,处理它们

3.事件对象,是处理事件的基础,在真正处理事件之前,你必须熟知这种对象

以下是一个事件对象的示例

以下是事件对象的帮助信息:

Get-Event cmdlet 返回具有以下属性的 PSEventArgs 对象 (System.Management.Automation.PSEventArgs)。

-- ComputerName:发生该事件的计算机的名称。只有在从远程计算机转发该事件时,才填充此属性值。

-- RunspaceId:一个 GUID,用于唯一标识该事件发生时所在的会话。只有在从远程计算机转发该事件时,才填充此属性值。

-- EventIdentifier:一个整数 (Int32),用于唯一标识当前会话中的事件通知。

-- Sender:生成事件的对象。在 Action 参数的值中,$Sender 自动变量包含发送方对象。

-- SourceEventArgs:从 EventArgs 派生的第一个参数(如果存在)。例如,在签名形式为“Object sender, Timers.ElapsedEventArgs e”的
   
   Timer Elapsed 事件中,SourceEventArgs 属性包含 Timers.ElapsedEventArgs。在 Action 参数的值中,$EventArgs 自动变量包含此值。

   [原2.0版本帮助有误,其指明是$SourceEventArgs,而5.0帮助中指明是$EventArgs包含此值,亦或是后发版本有所修改]

-- SourceArgs:原始事件签名的所有参数。对于标准事件签名,$Args[0] 表示发送方,$Args[1] 表示 SourceEventArgs。在 Action 参数的值中,
   
   $Args 自动变量包含此值。[原2.0版本的帮助文件中有误,5.0版本指定是$Args,亦或是后发版本的修改所致]

-- SourceIdentifier:用于标识事件订阅的字符串。在 Action 参数的值中,$Event 自动变量的 SourceIdentifier 属性包含此值。

-- TimeGenerated:一个 DateTime 对象,表示事件的生成时间。在 Action 参数的值中,$Event 自动变量的 TimeGenerated 属性包含此值。

-- MessageData:与事件订阅关联的数据。用户在注册事件时指定此数据。在 Action 参数的值中,$Event 自动变量的 MessageData 属性包含此值。

总结如下:
[1]Action中可用自动变量为:$Event/$Sender/$EventArgs/$Args
[2]由$Event自动变量,可获取ComputerName/RunspaceId/EventIdentifier/Sender/SourceEventArgs/SourceIdentifier/TimeGenerated/MessageData
[3]虽然$Event自动变量对象拥有SourceArgs属性,但是无法通过$Event.SourceArgs来访问,请使用$Args自动变量来访问该属性
[4]$Sender和$Event.Sender都是可用的访问途径

猜你喜欢

转载自www.cnblogs.com/vitrox/p/8983570.html
今日推荐