Почему «Write-Host» работает иначе, чем функция PowerShell и обработчик таймера? - PullRequest
0 голосов
/ 15 ноября 2018

У меня 1809 Windows 10 с PowerShell Core 6.1.1. Приведенный ниже пример кода:

function Test() {
  Write-Host "Test"
}
function Invoke-Test() {
  $timer = New-Object System.Timers.Timer
  $timer.AutoReset = $false
  $timer.Interval = 1
  Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action {
    Test
  }
  $timer.Enabled = $true
}

Если я вызываю функцию «Тест», я получаю вывод «Тест», как и ожидалось:

enter image description here

Но если я запланирую вызов с помощью таймера, командная строка полностью испортится:

enter image description here

Я смутно понимаю, что это что-то, связанное с внутренним "readline" и консольной механикой, но есть ли какой-нибудь способ произвести вывод новой строки, сопровождаемый командной строкой из таймера / дескриптора в powershell?

1 Ответ

0 голосов
/ 29 декабря 2018
Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Timer.Test -Action {
    Test
  }

$timer.Enabled = $true

PS C:\> $Subscriber = Get-EventSubscriber -SourceIdentifier Timer.Test
PS C:\> $Subscriber.action | Format-List -Property *

Свойство команды должно содержать результаты вашей «тестовой» функции.

URL ниже содержит подробные объяснения.https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-eventsubscriber?view=powershell-6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...