无法获取通过psxec

时间:2015-05-28 10:32:12

标签: java windows batch-file cmd psexec

目标:远程运行bat文件以满足测试需求。

要求:

  • 等到操作成功。
  • 获取结果代码并使用它。
  • 记录所有输出。
  • 情况:

    我在Windows 7上运行我的代码作为java应用程序。应用程序创建运行cmd.exe以从本地计算机运行bat的进程。 bat文件包含 psexec 的命令,可以远程运行另一个bat文件。

    我尝试了其他方法而没有创建本地bat文件:尝试运行psexec命令,但未能传递超过1个参数。

    清单:

    public static void main(String[] args) throws IOException,
            InterruptedException
    {       
        String[] command = { "cmd", };
        Process p = Runtime.getRuntime().exec(command);
    
        new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
        new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
        PrintWriter stdin = new PrintWriter(p.getOutputStream());
        stdin.println("cd C:\\Autotests\\Bat\\");
        stdin.println(".\\localBat.bat");
        // write any other commands you want here
        stdin.close();
        int returnCode = p.waitFor();
        System.out.println("Return code = " + returnCode);
    
    }
    
    public static class SyncPipe implements Runnable
    {
        public SyncPipe(InputStream istrm, OutputStream ostrm)
        {
            istrm_ = istrm;
            ostrm_ = ostrm;
        }
    
        public void run()
        {
            try
            {
                final byte[] buffer = new byte[1024];
                for (int length = 0; (length = istrm_.read(buffer)) != -1;)
                {
                    ostrm_.write(buffer, 0, length);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    
        private final OutputStream  ostrm_;
        private final InputStream   istrm_;
    }
    

    localBat.bat的内容:

    C:\\PSTools\\psexec.exe \\**.**.**.** -s -u domain\user -p password C:\somepath\remoteBat.bat
    

    有什么问题?

    如果我从命令行手动运行localBat.bat,我会在控制台中显示remoteBat.bat的所有输出。但是当我运行我的应用程序时,remoteBat.bat运行,我得到了退出代码stroed但我没有得到整个输出,只有这些行:

    PsExec v2.11 - Execute processes remotely
    Copyright (C) 2001-2014 Mark Russinovich
    Sysinternals - www.sysinternals.com
    Connecting to **.**.**.**...
    Starting PSEXESVC service on **.**.**.**...
    Connecting with PsExec service on **.**.**.**...
    Starting C:\somepath\remoteBat.bat on **.**.**.**...
    C:\somepath\remoteBat.bat exited on **.**.**.** with error code 0.
    

    影响

    当退出代码与0不同时,我无法处理和分析情况。

    拜托,帮助我,我被困在这里。

    0 个答案:

    没有答案