PowerShell事件:[2].NET对象事件(以订阅与处理Excel事件为例)

以下是一段订阅与处理Excel事件的代码

 1 Clear-Host
 2 $excel = New-Object -ComObject Excel.Application
 3 $wb = $excel.Workbooks.Add()
 4 $sht = $wb.Worksheets[1]
 5 Register-ObjectEvent -InputObject $excel -EventName SheetChange -SourceIdentifier Excel.SheetChange -Action { 
 6     Write-Host '$Event自动变量拥有的属性:'
 7     $Event | fl | Out-Host
 8     Write-Host [1] ('ComputerName: {0}' -f $Event.ComputerName)
 9     Write-Host [2] $Event.RunspaceId
10     Write-Host [3] $Event.EventIdentifier
11     Write-Host [4] $Event.Sender
12     Write-Host [5] ($Event.SourceEventArgs -eq $null)
13     #无任何输出,可见该成员虽然存在于$Event的属性中,却是无法访问的,请使用$Args替代
14     Write-Host [6] ($Event.SourceArgs -eq $null)
15     Write-Host [7] $Event.SourceIdentifier
16     Write-Host [8] $Event.TimeGenerated
17     Write-Host [9] $Event.MessageData
18     Write-Host ('-' * 10)
19     $Target = $Args[1]
20     Write-Host [1] $Target.Address()
21     #读取单元格的值时,请务必使用Value2,原来的Value属性是一个对象,不知为何
22     write-host [2] $Target.Value2
23     Write-Host [3] $Args.Count
24     Write-Host [4] $Args[0].Name
25     #竟然为$false,不知为何
26     Write-Host [5] ($Args[0] -eq $sht)
27     #按理本该返回$true,竟然无输出,不知为何
28     Write-Host [6] ($Target -eq $sht.Range('A1'))
29     Write-Host [7] $Sender.Name
30     Write-Host [8] ($Sender -eq $excel)
31 } -MessageData "SheetChange Event Happened!" | Out-Null
32 $sht.Cells(1, 1).Value = 'hello'
33 #等待事件响应
34 Start-Sleep 2
35 $wb.Close($false)
36 $excel.Quit()
37 Unregister-Event Excel.SheetChange

其执行结果如下:

猜你喜欢

转载自www.cnblogs.com/vitrox/p/8983575.html