You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Insire

Unregistered

1

Wednesday, March 23rd 2011, 12:10pm

ProcessBuilder - Syntax für komplexere Kommandozeilenbefehle unter Windows

Hallo,

Ich habe folgendes Problem/Aufgabe:

Ich möchte mittels Java folgenden Befehl über die Windowsbefehlszeile ausführen und danach die Ausgabe auslesen.

Source code

1
wmic /node: <PCNAME> computersystem get Username


Mit diesem Befehl kann man den gerade angemeldeten User an einem PC im Netzwerk ermitteln. <PCNAME> ist dabei eine beliebige Stringvariable.

Ich habe diesen Befehl bereits erfolgreich unter Windows getestet. Außerdem habe ich mir folgendes kleines Programm dazu geschrieben:

class: Test.java

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package data;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Test {
	public static void Test() {
		String line;
		ProcessBuilder processBuilder = new ProcessBuilder("wmic ","/node:","phoenix","computersystem");
		Process process = null;
		try {
			process = processBuilder.start();
		} catch (IOException e2) {
			e2.printStackTrace();
		}
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
		BufferedReader bufferedReaderError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
		/*try {
			while ((line = bufferedReaderError.readLine()) != null) {
				System.out.println(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}*/
		try {
			while ((line = bufferedReader.readLine()) != null) {
				System.out.println(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			while ((line = bufferedReader.readLine()) == "3") {
				System.out.println(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

class: Start.java

Java Quellcode

1
package data; public class Start { public static void main(String[] args) { Test.Test(); } }

Das Konstrukt schmeisst mir zwar nen Fehler, aber der ist nicht so wichtig weil er erst nach der Ausgabe meines Befehls auftritt.

Mein wirkliches Problem liegt, denke ich, an der Schreibweise des Befehls in:

Java Quellcode

1
ProcessBuilder processBuilder = new ProcessBuilder("wmic ","/node: Phoenix ", "computersystem get Username");

Hab schon mehrere Schreibweisen des in Klammern stehenden Codes ausprobiert ohne etwas passendes zu finden und bekomme immer wieder die Meldung das das Alias nicht gefunden werden konnte.

Daher denke ich, das ich den Befehl an der Stelle irgendwie falsch schreibe. Hat der jemand eine Idee wie ich das richtig schreiben muss, oder einen Tipp wo ich nachsehen könnte?

Insire

Unregistered

2

Wednesday, March 23rd 2011, 1:03pm

bin soeben auf die lösung gestoßen:
in dem string dürfen KEINE leerzeichen enthalten sein.....

Java Quellcode

1
ProcessBuilder processBuilder = new ProcessBuilder("wmic","/node:","phoenix", "computersystem","get","username");

Social bookmarks