我有一個需求,我需要從另一臺個人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或者我走錯了路?
任何幫助表示讚賞...
你不能使用文件共享? '\\ testdev19 \ c $ \ destdir'應該顯示該文件夾中的文件。 –
感謝Harry的建議,但不幸的是,我需要在500多臺服務器上完成這項工作,而不是所有的服務器所有者都允許共享一個文件夾。這就是原因,我想以編程方式使用Java來做這件事,因爲我在那種語言中更加舒適! – Prashanth
僅供參考,根據我的經驗,如果文件共享關閉,psexec也不起作用。可能有邊緣情況,我不確定細節。 (但是作爲一個系統管理員我自己,我寧願讓某人訪問一個適當受限的文件共享,而不是讓他們通過psexec訪問管理員!) –