How to send keys/ input to a process that is running without a logged in user using powershell?












1















I'm having an issue with automating part of an application install with powershell.
Part of the install is running a command line tool with parameters and entering credentials to access a database. This is supposed to be done without logging in.
For that purpose I've been using scheduled tasks to start my scripts at system startup.



I've been trying to get this particular step working by using AppActivate and SendWait to send the credentials to the window. This does not work though since there is no interactive window if I use the task scheduler.



This is the current script I've been using. It works if I would use the RunOnce key for example.



[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")

powershell.exe add-type -AssemblyName microsoft.VisualBasic

add-type -AssemblyName System.Windows.Forms

$parms = 'create instance'

Start-Process "app.exe" -ArgumentList $parms -WorkingDirectory "C:appapp.exe"

start-sleep -Milliseconds 1000

[Microsoft.VisualBasic.Interaction]::AppActivate("C:appapp.exe")

[System.Windows.Forms.SendKeys]::SendWait("username")

start-sleep -Milliseconds 1000

[Microsoft.VisualBasic.Interaction]::AppActivate("C:appapp.exe")

[System.Windows.Forms.SendKeys]::SendWait("password")


This script is called by another script which is run by the task scheduler.
Right now it fails with:



Exception calling "AppActivate" with "1" argument(s): "Process '{0}' was not found."


and:



Exception calling "SendWait" with "1" argument(s): "Access is denied"


Which is due to not being able to access the window.



Is there any way to send the username and password to the process without requiring an active windows? From what I've seen it doesn't seem to be supported by powershell but I'm still hoping that there is a way. Maybe using Handles? I can not use any applications like AutoHotkey or AutoIt.










share|improve this question



























    1















    I'm having an issue with automating part of an application install with powershell.
    Part of the install is running a command line tool with parameters and entering credentials to access a database. This is supposed to be done without logging in.
    For that purpose I've been using scheduled tasks to start my scripts at system startup.



    I've been trying to get this particular step working by using AppActivate and SendWait to send the credentials to the window. This does not work though since there is no interactive window if I use the task scheduler.



    This is the current script I've been using. It works if I would use the RunOnce key for example.



    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")

    powershell.exe add-type -AssemblyName microsoft.VisualBasic

    add-type -AssemblyName System.Windows.Forms

    $parms = 'create instance'

    Start-Process "app.exe" -ArgumentList $parms -WorkingDirectory "C:appapp.exe"

    start-sleep -Milliseconds 1000

    [Microsoft.VisualBasic.Interaction]::AppActivate("C:appapp.exe")

    [System.Windows.Forms.SendKeys]::SendWait("username")

    start-sleep -Milliseconds 1000

    [Microsoft.VisualBasic.Interaction]::AppActivate("C:appapp.exe")

    [System.Windows.Forms.SendKeys]::SendWait("password")


    This script is called by another script which is run by the task scheduler.
    Right now it fails with:



    Exception calling "AppActivate" with "1" argument(s): "Process '{0}' was not found."


    and:



    Exception calling "SendWait" with "1" argument(s): "Access is denied"


    Which is due to not being able to access the window.



    Is there any way to send the username and password to the process without requiring an active windows? From what I've seen it doesn't seem to be supported by powershell but I'm still hoping that there is a way. Maybe using Handles? I can not use any applications like AutoHotkey or AutoIt.










    share|improve this question

























      1












      1








      1








      I'm having an issue with automating part of an application install with powershell.
      Part of the install is running a command line tool with parameters and entering credentials to access a database. This is supposed to be done without logging in.
      For that purpose I've been using scheduled tasks to start my scripts at system startup.



      I've been trying to get this particular step working by using AppActivate and SendWait to send the credentials to the window. This does not work though since there is no interactive window if I use the task scheduler.



      This is the current script I've been using. It works if I would use the RunOnce key for example.



      [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")

      powershell.exe add-type -AssemblyName microsoft.VisualBasic

      add-type -AssemblyName System.Windows.Forms

      $parms = 'create instance'

      Start-Process "app.exe" -ArgumentList $parms -WorkingDirectory "C:appapp.exe"

      start-sleep -Milliseconds 1000

      [Microsoft.VisualBasic.Interaction]::AppActivate("C:appapp.exe")

      [System.Windows.Forms.SendKeys]::SendWait("username")

      start-sleep -Milliseconds 1000

      [Microsoft.VisualBasic.Interaction]::AppActivate("C:appapp.exe")

      [System.Windows.Forms.SendKeys]::SendWait("password")


      This script is called by another script which is run by the task scheduler.
      Right now it fails with:



      Exception calling "AppActivate" with "1" argument(s): "Process '{0}' was not found."


      and:



      Exception calling "SendWait" with "1" argument(s): "Access is denied"


      Which is due to not being able to access the window.



      Is there any way to send the username and password to the process without requiring an active windows? From what I've seen it doesn't seem to be supported by powershell but I'm still hoping that there is a way. Maybe using Handles? I can not use any applications like AutoHotkey or AutoIt.










      share|improve this question














      I'm having an issue with automating part of an application install with powershell.
      Part of the install is running a command line tool with parameters and entering credentials to access a database. This is supposed to be done without logging in.
      For that purpose I've been using scheduled tasks to start my scripts at system startup.



      I've been trying to get this particular step working by using AppActivate and SendWait to send the credentials to the window. This does not work though since there is no interactive window if I use the task scheduler.



      This is the current script I've been using. It works if I would use the RunOnce key for example.



      [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")

      powershell.exe add-type -AssemblyName microsoft.VisualBasic

      add-type -AssemblyName System.Windows.Forms

      $parms = 'create instance'

      Start-Process "app.exe" -ArgumentList $parms -WorkingDirectory "C:appapp.exe"

      start-sleep -Milliseconds 1000

      [Microsoft.VisualBasic.Interaction]::AppActivate("C:appapp.exe")

      [System.Windows.Forms.SendKeys]::SendWait("username")

      start-sleep -Milliseconds 1000

      [Microsoft.VisualBasic.Interaction]::AppActivate("C:appapp.exe")

      [System.Windows.Forms.SendKeys]::SendWait("password")


      This script is called by another script which is run by the task scheduler.
      Right now it fails with:



      Exception calling "AppActivate" with "1" argument(s): "Process '{0}' was not found."


      and:



      Exception calling "SendWait" with "1" argument(s): "Access is denied"


      Which is due to not being able to access the window.



      Is there any way to send the username and password to the process without requiring an active windows? From what I've seen it doesn't seem to be supported by powershell but I'm still hoping that there is a way. Maybe using Handles? I can not use any applications like AutoHotkey or AutoIt.







      powershell scheduled-tasks sendkeys






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 15 '18 at 12:22









      TrafficJam23TrafficJam23

      61




      61
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Try this,



              $proc = Get-process | where {$_.path -eq "C:appapp.exe"}
          [Microsoft.VisualBasic.Interaction]::AppActivate($Proc.id)





          share|improve this answer
























          • It is recommended to provide more context to your answer. Review the guide on how to answer: stackoverflow.com/help/how-to-answer

            – Enkode
            Dec 12 '18 at 22:04











          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%2f53319429%2fhow-to-send-keys-input-to-a-process-that-is-running-without-a-logged-in-user-us%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









          0














          Try this,



              $proc = Get-process | where {$_.path -eq "C:appapp.exe"}
          [Microsoft.VisualBasic.Interaction]::AppActivate($Proc.id)





          share|improve this answer
























          • It is recommended to provide more context to your answer. Review the guide on how to answer: stackoverflow.com/help/how-to-answer

            – Enkode
            Dec 12 '18 at 22:04
















          0














          Try this,



              $proc = Get-process | where {$_.path -eq "C:appapp.exe"}
          [Microsoft.VisualBasic.Interaction]::AppActivate($Proc.id)





          share|improve this answer
























          • It is recommended to provide more context to your answer. Review the guide on how to answer: stackoverflow.com/help/how-to-answer

            – Enkode
            Dec 12 '18 at 22:04














          0












          0








          0







          Try this,



              $proc = Get-process | where {$_.path -eq "C:appapp.exe"}
          [Microsoft.VisualBasic.Interaction]::AppActivate($Proc.id)





          share|improve this answer













          Try this,



              $proc = Get-process | where {$_.path -eq "C:appapp.exe"}
          [Microsoft.VisualBasic.Interaction]::AppActivate($Proc.id)






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Dec 12 '18 at 14:09









          Raeez VpRaeez Vp

          211




          211













          • It is recommended to provide more context to your answer. Review the guide on how to answer: stackoverflow.com/help/how-to-answer

            – Enkode
            Dec 12 '18 at 22:04



















          • It is recommended to provide more context to your answer. Review the guide on how to answer: stackoverflow.com/help/how-to-answer

            – Enkode
            Dec 12 '18 at 22:04

















          It is recommended to provide more context to your answer. Review the guide on how to answer: stackoverflow.com/help/how-to-answer

          – Enkode
          Dec 12 '18 at 22:04





          It is recommended to provide more context to your answer. Review the guide on how to answer: stackoverflow.com/help/how-to-answer

          – Enkode
          Dec 12 '18 at 22:04




















          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%2f53319429%2fhow-to-send-keys-input-to-a-process-that-is-running-without-a-logged-in-user-us%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

          Florida Star v. B. J. F.

          Danny Elfman

          Lugert, Oklahoma