Redirecting Output and Error to custom PSHostUserInterface












0















I am using a custom PSHostUserInterface to handle custom input and output when running PowerShell scripts. By default, it seems that Write-Error does not use PSHostUserInterface.WriteErrorLine, and Write-Output does not use any of the available functions.



The common answer seems to be using $host.ui.WriteErrorLine() instead of Write-Error, but I have a large collection of existing scripts and would prefer not to have to go though and edit all of them. I would like to, if at all possible, redirect error messages such that the message from Write-Error "message" is passed as $host.ui.WriteErrorLine("message"). Is this possible?



In addition to this, I would like to be able to also redirect Write-Output to PSHostUserInterface.WriteLine. To make matters a bit simpler, all calls to Write-Output are strings, so although a PSObject is spawned when it is called, it is guaranteed to only be a string.



I realize this may not be the best practice, but all of the scripts in question (and there are many of them) are in-house and use the basic Write-* syntax, so keeping the scripts as-is is much preferred to changing all of them.










share|improve this question





























    0















    I am using a custom PSHostUserInterface to handle custom input and output when running PowerShell scripts. By default, it seems that Write-Error does not use PSHostUserInterface.WriteErrorLine, and Write-Output does not use any of the available functions.



    The common answer seems to be using $host.ui.WriteErrorLine() instead of Write-Error, but I have a large collection of existing scripts and would prefer not to have to go though and edit all of them. I would like to, if at all possible, redirect error messages such that the message from Write-Error "message" is passed as $host.ui.WriteErrorLine("message"). Is this possible?



    In addition to this, I would like to be able to also redirect Write-Output to PSHostUserInterface.WriteLine. To make matters a bit simpler, all calls to Write-Output are strings, so although a PSObject is spawned when it is called, it is guaranteed to only be a string.



    I realize this may not be the best practice, but all of the scripts in question (and there are many of them) are in-house and use the basic Write-* syntax, so keeping the scripts as-is is much preferred to changing all of them.










    share|improve this question



























      0












      0








      0


      0






      I am using a custom PSHostUserInterface to handle custom input and output when running PowerShell scripts. By default, it seems that Write-Error does not use PSHostUserInterface.WriteErrorLine, and Write-Output does not use any of the available functions.



      The common answer seems to be using $host.ui.WriteErrorLine() instead of Write-Error, but I have a large collection of existing scripts and would prefer not to have to go though and edit all of them. I would like to, if at all possible, redirect error messages such that the message from Write-Error "message" is passed as $host.ui.WriteErrorLine("message"). Is this possible?



      In addition to this, I would like to be able to also redirect Write-Output to PSHostUserInterface.WriteLine. To make matters a bit simpler, all calls to Write-Output are strings, so although a PSObject is spawned when it is called, it is guaranteed to only be a string.



      I realize this may not be the best practice, but all of the scripts in question (and there are many of them) are in-house and use the basic Write-* syntax, so keeping the scripts as-is is much preferred to changing all of them.










      share|improve this question
















      I am using a custom PSHostUserInterface to handle custom input and output when running PowerShell scripts. By default, it seems that Write-Error does not use PSHostUserInterface.WriteErrorLine, and Write-Output does not use any of the available functions.



      The common answer seems to be using $host.ui.WriteErrorLine() instead of Write-Error, but I have a large collection of existing scripts and would prefer not to have to go though and edit all of them. I would like to, if at all possible, redirect error messages such that the message from Write-Error "message" is passed as $host.ui.WriteErrorLine("message"). Is this possible?



      In addition to this, I would like to be able to also redirect Write-Output to PSHostUserInterface.WriteLine. To make matters a bit simpler, all calls to Write-Output are strings, so although a PSObject is spawned when it is called, it is guaranteed to only be a string.



      I realize this may not be the best practice, but all of the scripts in question (and there are many of them) are in-house and use the basic Write-* syntax, so keeping the scripts as-is is much preferred to changing all of them.







      c# powershell






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 2 at 21:51









      Ansgar Wiechers

      145k13132190




      145k13132190










      asked Jan 2 at 14:39









      HausHaus

      589212




      589212
























          1 Answer
          1






          active

          oldest

          votes


















          1














          You can overwrite Write-Error function. You can put new definition at the beginning of each script or save it as a module to apply new definition across all scripts



          function write-error {param($errMsg)
          $host.ui.WriteErrorLine($errMsg)
          }


          To invoke original Write-Error cmdlet you can use



          Microsoft.PowerShell.UtilityWrite-Error





          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%2f54008263%2fredirecting-output-and-error-to-custom-pshostuserinterface%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









            1














            You can overwrite Write-Error function. You can put new definition at the beginning of each script or save it as a module to apply new definition across all scripts



            function write-error {param($errMsg)
            $host.ui.WriteErrorLine($errMsg)
            }


            To invoke original Write-Error cmdlet you can use



            Microsoft.PowerShell.UtilityWrite-Error





            share|improve this answer




























              1














              You can overwrite Write-Error function. You can put new definition at the beginning of each script or save it as a module to apply new definition across all scripts



              function write-error {param($errMsg)
              $host.ui.WriteErrorLine($errMsg)
              }


              To invoke original Write-Error cmdlet you can use



              Microsoft.PowerShell.UtilityWrite-Error





              share|improve this answer


























                1












                1








                1







                You can overwrite Write-Error function. You can put new definition at the beginning of each script or save it as a module to apply new definition across all scripts



                function write-error {param($errMsg)
                $host.ui.WriteErrorLine($errMsg)
                }


                To invoke original Write-Error cmdlet you can use



                Microsoft.PowerShell.UtilityWrite-Error





                share|improve this answer













                You can overwrite Write-Error function. You can put new definition at the beginning of each script or save it as a module to apply new definition across all scripts



                function write-error {param($errMsg)
                $host.ui.WriteErrorLine($errMsg)
                }


                To invoke original Write-Error cmdlet you can use



                Microsoft.PowerShell.UtilityWrite-Error






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 2 at 15:22









                Mike TwcMike Twc

                1,1961513




                1,1961513
































                    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%2f54008263%2fredirecting-output-and-error-to-custom-pshostuserinterface%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

                    Monofisismo

                    Angular Downloading a file using contenturl with Basic Authentication

                    Olmecas