2016-10-06 4 views
-1

Мне нужно выполнить пакетный файл, присутствующий на удаленном компьютере, с моей локальной машины.Как выполнить пакетный файл удаленно в java?

я подключаю через FTP к удаленной машине и попытаться выполнить пакетный файл remotely.but не в состоянии сделать это также не getiing любого исключения .below моего код

public static void main(String[] args) throws SocketException, IOException, 
     InterruptedException { 
static String server = "192.168.2.133"; 
static int port = 21; 
static String user = "kamal"; 
static String pass = "12345"; 
static FTPClient ftpClient; 

    // TODO Auto-generated method stub 
    ftpClient = new FTPClient(); 
    ftpClient.connect(server, port); 
    ftpClient.login(user, pass); 
    ftpClient.enterLocalPassiveMode(); 
    ftpClient.changeWorkingDirectory("/"); 

    System.out.println(ftpClient.isConnected()); 
    // ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 

    System.out.println("ftpClient.printWorkingDirectory() " 
      + ftpClient.printWorkingDirectory()); 

    String[] str = ftpClient.listNames(ftpClient.printWorkingDirectory()); 
    for (String string : str) { 
     System.out.println(string); 
    } 

    // ftpClient.changeWorkingDirectory(ftpClient.printWorkingDirectory().concat("demo")); 
    System.out.println("ftpClient.printWorkingDirectory() " 
      + ftpClient.printWorkingDirectory()); 
    String psCommand = "C:/Users/kamlesh.kumar/Downloads/PSTools/PsExec.exe //" 
      + server + " -u " + user + " -p " + pass; 
    psCommand = psCommand + " " + "MEF.bat"; 
    // psCommand = psCommand + " " + commandToRunOnRemoteMachine + " " + 
    // parameters; 
    String[] cmd = new String[5]; 
    cmd[0] = "cmd.exe"; 
    cmd[1] = "/C"; 
    cmd[2] = psCommand; 
    cmd[3] = ""; 
    cmd[4] = ""; 
    // Run remote command 
    // ftpClient.changeWorkingDirectory(ftpClient.printWorkingDirectory().concat("\\\\192.168.2.135\\demo\\demo")); 
    // System.out.println(ftpClient.printWorkingDirectory()); 
    File f = new File(ftpClient.printWorkingDirectory()); 
    Process p = null; 
    try { 
     p = Runtime.getRuntime().exec(cmd, null, f); 
    } catch (Exception e) { 
     System.out.println(e.toString()); 
     e.printStackTrace(); 
    } 

    int exitStatus = 0; 
    try { 
     exitStatus = p.waitFor(); 
     System.out.println("exitStatus in try " + exitStatus); 
    } catch (Exception e) { 
     System.out.println("exitStatus" + exitStatus); 
     System.out.println(e.toString()); 
     e.printStackTrace(); 
    } finally { 
     System.out.println("exitStatus in finally " + exitStatus); 
    } 
    if (exitStatus == 0) { 
     System.out.println("Done"); 

    } 

} 
+1

Вы не можете удаленно выполнить файл с помощью FTP. Посмотрите на использование утилиты Microsoft PSEXEC. – Squashman

+0

ftp предназначен только для передачи файлов. Самый популярный инструмент для удаленного выполнения - это PSexec, хотя он имеет проблемы при вызове из [java] (http://forum.sysinternals.com/faq-common-pstools-issues_topic15920.html). Вы можете проверить SCHTASKS или WMIC, чтобы вы могли удаленно выполнить сценарий без сторонних инструментов. – npocmaka

+0

Один ответ на ваш вопрос - RMI. Вы даже включили его в теги. Почему же вы пытаетесь использовать FTP? – EJP

ответ

0

Вы можете получить PSEXEC от https://technet.microsoft.com/en-us/sysinternals/pxexec.aspx и то, что я делал раньше, это сделать пакетный файл, который скопировал бы файл, который вы хотите запустить на удаленном ПК, на этот компьютер, а затем используйте PSEXEC для его удаленного удаления и также удалите этот файл, который был сделан. Я не знаю, это то, что вы ищете, но этого может быть достаточно.

set remotecpu="computer you're sending it to" 

robocopy "localpcdrive\location1\scripts\script you want ran" \\%remotecpu%\c$\temp_folder 


psexec \\%remotecpu% -u "username" -p "password" -i -d "C:\temp_folder\path to\script you want ran" 

И если я не ошибаюсь, что будет выполнять файл для вас, то вобще дель команды и удалите temp_folder сценарий находится под. Или используйте что-то необычное, как

If Exist "%SystemDrive%\temp_folder" (RD/S/Q "%SystemDrive%\temp_folder")