计时器对象无法启动并执行操作块Powershell 3

问题描述

在下面的脚本中,一个Action链接到Timer对象,但是即使Timer过去了(2000毫秒),该Action也不会执行。

缺少什么?

***Console (No Further Output)-***  
14-08-2020 11:38:54 Action reached 
Id  -  Name  - PSJobTypeName  - State  - HasMoreData -  Location -  Command        
         
5 -Timer.Elapsed ----------   NotStarted - False-------------     Write-Output Get-D.....                      



***Script-***   
Get-event | Remove-Event
Get-EventSubscriber | Unregister-Event

$Timer = New-Object System.Timers.Timer
$objectEventArgs = @{
    InputObject = $Timer
    EventName = 'Elapsed'
    SourceIdentifier = 'Timer.Elapsed'
}

$Timer.Interval = 2000
$Timer.Autoreset = $true
$Timer.Enabled = $true



Write-Output $((Get-Date).ToString() + " Action reached")

$global:n = Write-Output $((Get-Date).ToString() + "Action block executed")
$action = { $n } 

Register-ObjectEvent @objectEventArgs -Action $action

$Timer.start() #even calling timer start method doesn't trigger the action
 

解决方法

在操作块中用 Write-Host 替换了写入输出,此问题已解决。

Write-Output将输出通过cmdlet传递给管道,并且不会写入控制台。

要写入控制台,必须使用Write-Host。