title: execute powershell command through remote server with java
body: <p>I created a function that should allow me to execute command.<br>
  The first command, executed thanks to setcommand is "powershell" is working well and I get the return of the shell :<br>
  "Windows PowerShell 
  Copyright (C) 2009 Microsoft Corporation. Tous droits r‚serv‚s."<br>
  My problem is to run a command after powershell is running with out.write function.</p>
  
  <pre><code>//The command is equal to "powershell" and run powershell correctly
  private static void executeCommand(String command) {
      try {
      ChannelExec channel = (ChannelExec) session.openChannel("exec");
      ((ChannelExec) channel).setCommand(command);
  
       OutputStream out = channel.getOutputStream();
       InputStream in = channel.getInputStream();
  
      channel.connect();
      out.write(("mkdir C:\\test" + "\n").getBytes());
      out.flush();
  
      byte[] tmp = new byte[1024];
      while (channel.getExitStatus() == -1) {
          while (in.available() &gt; 0) {
              int i = in.read(tmp, 0, 1024);
              if (i &lt; 0)
                  break;
              System.out.print(new String(tmp, 0, i));
          }
          if (channel.isClosed()) {
              System.out.println("exit-status: " + channel.getExitStatus());
              break;
          }
          try {
              Thread.sleep(1000);
          } catch (Exception ee) {
              System.out.println(ee);
          }
      }
      channel.disconnect();
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } catch (JSchException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
  }
  </code></pre>
  
  <p>Do you have any solution to solve my problem or any other way to do the job ?</p>
  
  <p>EDIT :</p>
  
  <pre><code>    Process p;
  
      try {
  
          p = new ProcessBuilder()
          .inheritIO()
          .command("powershell", "$user='root'; $pass='test'; $passwd=ConvertTo-SecureString -AsPlainText $pass -Force; $cred=New-Object System.Management.Automation.PSCredential -ArgumentList $user, $passwd; Invoke-command -ComputerName 10.64.2.35 -ScriptBlock {Get-ChildItem C:\\} -credential $cred").start();
          p.waitFor();
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
  </code></pre>