Объект Timer не запускает и не выполняет блок действий (Powershell 3)

#powershell-3.0

#powershell-3.0

Вопрос:

В приведенном ниже сценарии действие связано с объектом Timer , но действие не выполняется даже по истечении таймера (2000 мс).

Чего не хватает?

 ***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
 
  

Ответ №1:

Заменил вывод записи в блоке действий на Write-Host, и проблема была решена.

Функция записи-вывода передает выходные данные по каналу командлета и не выполняет запись в консоль.

Для записи в консоль должен использоваться узел записи.