Why “Write-Host” works differently from PowerShell function and timer handler?












2















I have 1809 Windows 10 box with PowerShell Core 6.1.1
Given following code sample:



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
}


If I invoke "Test" function, I get "Test" output as expected:



enter image description here



But if I schedule invocation with a timer, command prompt is completely messed up:



enter image description here



I vaguely understand that it's something related to internal "readline" and console mechanic, but is it any way to produce newline output followed by a command prompt from a timer/handle in powershell?










share|improve this question


















  • 1





    I am familiar with this issue. Interestingly, I just tried it with PowerShell v5.1.17134.407 and it does output the prompt. Apparently this behavior was changed in the newest release? Worth investigating. Not sure about pwsh core of course.

    – marsze
    Nov 15 '18 at 8:31


















2















I have 1809 Windows 10 box with PowerShell Core 6.1.1
Given following code sample:



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
}


If I invoke "Test" function, I get "Test" output as expected:



enter image description here



But if I schedule invocation with a timer, command prompt is completely messed up:



enter image description here



I vaguely understand that it's something related to internal "readline" and console mechanic, but is it any way to produce newline output followed by a command prompt from a timer/handle in powershell?










share|improve this question


















  • 1





    I am familiar with this issue. Interestingly, I just tried it with PowerShell v5.1.17134.407 and it does output the prompt. Apparently this behavior was changed in the newest release? Worth investigating. Not sure about pwsh core of course.

    – marsze
    Nov 15 '18 at 8:31
















2












2








2








I have 1809 Windows 10 box with PowerShell Core 6.1.1
Given following code sample:



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
}


If I invoke "Test" function, I get "Test" output as expected:



enter image description here



But if I schedule invocation with a timer, command prompt is completely messed up:



enter image description here



I vaguely understand that it's something related to internal "readline" and console mechanic, but is it any way to produce newline output followed by a command prompt from a timer/handle in powershell?










share|improve this question














I have 1809 Windows 10 box with PowerShell Core 6.1.1
Given following code sample:



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
}


If I invoke "Test" function, I get "Test" output as expected:



enter image description here



But if I schedule invocation with a timer, command prompt is completely messed up:



enter image description here



I vaguely understand that it's something related to internal "readline" and console mechanic, but is it any way to produce newline output followed by a command prompt from a timer/handle in powershell?







powershell






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 15 '18 at 7:31









grigoryvpgrigoryvp

11.6k47138249




11.6k47138249








  • 1





    I am familiar with this issue. Interestingly, I just tried it with PowerShell v5.1.17134.407 and it does output the prompt. Apparently this behavior was changed in the newest release? Worth investigating. Not sure about pwsh core of course.

    – marsze
    Nov 15 '18 at 8:31
















  • 1





    I am familiar with this issue. Interestingly, I just tried it with PowerShell v5.1.17134.407 and it does output the prompt. Apparently this behavior was changed in the newest release? Worth investigating. Not sure about pwsh core of course.

    – marsze
    Nov 15 '18 at 8:31










1




1





I am familiar with this issue. Interestingly, I just tried it with PowerShell v5.1.17134.407 and it does output the prompt. Apparently this behavior was changed in the newest release? Worth investigating. Not sure about pwsh core of course.

– marsze
Nov 15 '18 at 8:31







I am familiar with this issue. Interestingly, I just tried it with PowerShell v5.1.17134.407 and it does output the prompt. Apparently this behavior was changed in the newest release? Worth investigating. Not sure about pwsh core of course.

– marsze
Nov 15 '18 at 8:31














1 Answer
1






active

oldest

votes


















-2














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 *


The command property should hold the results of your “test” function.



The url below has detailed explanations.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-eventsubscriber?view=powershell-6






share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53314401%2fwhy-write-host-works-differently-from-powershell-function-and-timer-handler%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    -2














    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 *


    The command property should hold the results of your “test” function.



    The url below has detailed explanations.
    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-eventsubscriber?view=powershell-6






    share|improve this answer






























      -2














      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 *


      The command property should hold the results of your “test” function.



      The url below has detailed explanations.
      https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-eventsubscriber?view=powershell-6






      share|improve this answer




























        -2












        -2








        -2







        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 *


        The command property should hold the results of your “test” function.



        The url below has detailed explanations.
        https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-eventsubscriber?view=powershell-6






        share|improve this answer















        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 *


        The command property should hold the results of your “test” function.



        The url below has detailed explanations.
        https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-eventsubscriber?view=powershell-6







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Dec 29 '18 at 8:56









        Cœur

        18.5k9110148




        18.5k9110148










        answered Dec 29 '18 at 0:14









        Sully2_7Sully2_7

        1




        1
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53314401%2fwhy-write-host-works-differently-from-powershell-function-and-timer-handler%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Bressuire

            Vorschmack

            Quarantine