2016-10-16 66 views
0

我有一個需求,我需要從另一臺個人Windows機器連接到Windows服務器。我還需要能夠將CD放入遠程計算機上的特定文件夾中,獲取該文件夾中的文件列表並檢查該文件夾中是否存在文件。當我開始研究這個,我可以理解,有兩種選擇:PsExec和Java連接到遠程Windows服務器

  • 對Windows Server和使用客戶端上安裝OpenSSH的像JSch連接 - 我的團隊紅外線可能會或可能不會批准這一請求。
  • 使用PsExec進行連接並做類似的事情 - 這裏是我能夠連接的位置,但無法弄清如何將CD放入目錄並獲取任何文件夾中的文件列表。

以下是我在代碼方面:

private static void authenticateAndExecute() { 
    String psCommand = PATH_TO_PSEXEC + "\\PsExec.exe \\\\" + "testdev19" + " -u " + "userName" 
      + " -p " + "password"; 
    psCommand = psCommand + " " + "cmd cd c:\\destdir" + " dir "; 
    String[] cmd = new String[5]; 
    cmd[0] = "cmd.exe"; 
    cmd[1] = "/C"; 
    cmd[2] = psCommand; 
    cmd[3] = ""; 
    cmd[4] = ""; 
    // Run remote command 
    Process p = null; 
    try { 
     p = Runtime.getRuntime().exec(cmd, null); 
     System.out.println("Connected..." + p.getOutputStream()); 
     InputStream is = p.getInputStream(); 

     OutputStream os = p.getOutputStream(); 

     InputStream es = p.getErrorStream(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     BufferedReader errReader = new BufferedReader(new InputStreamReader(es)); 
     String line; 

     // Read STDOUT into a buffer. 
     while ((line = errReader.readLine()) != null) { 
      System.out.println(line); 
     } 
     // If no STDOUT check STDERR. 
     while ((line = reader.readLine()) != null) { 
      System.out.println(line); 
     } 
     // Wait for the process to end. 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } finally { 
     if (p != null) { 
      p.destroy(); 
     } 
    } 
} 

所有我在此之後運行看到的是,過程已經爲0的返回碼結束了我想看到的名單目標目錄中的文件。這甚至有可能使用PsExec或者我走錯了路?

任何幫助表示讚賞...

+0

你不能使用文件共享? '\\ testdev19 \ c $ \ destdir'應該顯示該文件夾中的文件。 –

+0

感謝Harry的建議,但不幸的是,我需要在500多臺服務器上完成這項工作,而不是所有的服務器所有者都允許共享一個文件夾。這就是原因,我想以編程方式使用Java來做這件事,因爲我在那種語言中更加舒適! – Prashanth

+0

僅供參考,根據我的經驗,如果文件共享關閉,psexec也不起作用。可能有邊緣情況,我不確定細節。 (但是作爲一個系統管理員我自己,我寧願讓某人訪問一個適當受限的文件共享,而不是讓他們通過psexec訪問管理員!) –

回答

0

請看看:

https://www.ibm.com/developerworks/community/blogs/738b7897-cd38-4f24-9f05-48dd69116837/entry/programmatically_connecting_to_remote_systems2?lang=en 

可能解決您的問題

+0

請在帖子中提供答案的詳細信息,而不是僅提供一個鏈接。 – lofihelsinki

0
String psCommand = "<path_of_psexec>/psexec.exe \\\\"+currentServerHostname + " -u " + currentServerUser + " -p " + currentServerPass; 
     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 
     File f = new File(getCurrentWorkingDirectory() + "\\lib"); 
     Process p = Runtime.getRuntime().exec(cmd,null,f);