#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, и проблема была решена.
Функция записи-вывода передает выходные данные по каналу командлета и не выполняет запись в консоль.
Для записи в консоль должен использоваться узел записи.