# Alle Benutzernamen auslesen



## The_S (18. Jan 2005)

Gibt es in Java bzw. DOS eine Möglichkeit ALLE Benutzernamen des Computers auszulesen? Wenn jemand eine DOS-Möglichkeit kennt, wie kann ich die Namen in nem String speichern?


----------



## KSG9|sebastian (18. Jan 2005)

hmm......*überleg*

Edit: Ob es möglich ist, alle benutzernamen des systems auszulesen, weiß ich net....


Also du kannst dir n java programm schreiben dann mit Runtime.getRuntime().exec nen Befehl ausführt. Wenn du den Rückgabewert nicht bekommst kannst du das ganze so machen



```
ipconfig > ip.txt
```

also mit "befehl > datei" speicherst du die ausgabe von nem befehl "befehl" in einer datei "datei". die kannst du dann wiederum mit java öffnen und die namen in nem string speichern


----------



## DP (18. Jan 2005)

ich glaube das kannste knicken. was machste denn wenn sich die user nicht am lokalen rechner sondern in der domäne anmelden?!


----------



## The_S (18. Jan 2005)

KSG9|plak hat gesagt.:
			
		

> hmm......*überleg*
> 
> Edit: Ob es möglich ist, alle benutzernamen des systems auszulesen, weiß ich net....
> 
> ...



Sorry, da erzählst du mir leider nix neues! Wie ich von Java aus DOS-Befehle oder sonstige Programme ausführen kann weiß ich und wenn ich Beispielsweise alles im Ordner Dokumente und Einstellungen in ne Textdatei speicher, is da noch anderer scheiß dabei, der da net nei dürf. Weiß jemand vielleicht wie ich die Benutzernamen herausfilter?


----------



## The_S (18. Jan 2005)

DP hat gesagt.:
			
		

> ich glaube das kannste knicken. was machste denn wenn sich die user nicht am lokalen rechner sondern in der domäne anmelden?!



brauchs nur lokal


----------



## KSG9|sebastian (18. Jan 2005)

evtl. mit vb und windows api, aber mit dos...


----------



## The_S (18. Jan 2005)

Müsste des halt in meinem Java-Programm weiterverarbeiten! VB kann ich net!


----------



## KSG9|sebastian (18. Jan 2005)

oh...
schonmal google durchstöbert ?


----------



## The_S (18. Jan 2005)

Ja scho, wusst aber net wirklich nach was ich suchen soll! Aber das was es gefunden hat war nutzlos!  :cry:


----------



## KSG9|sebastian (18. Jan 2005)

also ich hätte ne lösung, was ich weiß aber nur für >= xp und ob es zusammen mit java funktioniert kann ich nicht garantieren.

also, das ganze geht über die WMI Console

start -> ausführen -> wmic

Kann sein dass es n paar Minuten dauert. Dann kannst du mit dem Befehl "useraccount" alle Konten + Infos dazu auslesen.

Funktionieren tut es am besten so:

wmic console öffnen(wmic), dann folgenden befehl eingeben

/OUTPUT:"deine_datei.txt"

Damit werden jegliche Ausgaben in die Datei "deine_datei.txt" geschrieben. Die Anführungszeichen sind nötig, sobald man Sonderzeichen verwendet. Also einfach mit hinschreiben, schaden tun sie nicht.

Dannach kannst du dann den Befehl "useraccount" ausführen, der schreibt dir dann benutzerkonten + daten der konten in die Datei. 

Dann heißt es eben parsen, is aber relativ einfach, da die dinger anhang von Tabulatoren getrennt sind.

MfG

plak


----------



## The_S (18. Jan 2005)

Hey Cool! Danke! Werd ich gleich mal ausprobieren

[edit] ich werds doch nicht ausprobieren! Bin auf der Arbeit und hab nur Win 2000  :autsch:


----------



## KSG9|sebastian (18. Jan 2005)

teste es mal ob die wmi console bei win2k schon vorhanden ist...


----------



## The_S (18. Jan 2005)

nö, zumindest nicht durch Start -> ausführen -> WMI


----------



## KSG9|sebastian (18. Jan 2005)

*Start -> Ausführen... -> wmic.exe*

------


Also ich habs kurz getestet auf WinXP, hier ist der Colde:
Ach ja: Das Programm MUSS mit Adminberechtigungen ausgeführt werden, sonst haste keinen Zugriff auf die WMI-Console!!!


```
package info.win.usr;

public class Test{
   public static void main(String args[]){
      try{
          Runtime.getRuntime().exec("cmd /c wmic /OUTPUT:\"c:\\useracc.txt\" useraccount");
      }catch(IOException io){
       e.printStackTrace();
   }

   }

}
```



			
				useracc.txt hat gesagt.:
			
		

> Inhalt der Datei:
> 
> AccountType    Caption    Description    Disabled    Domain    FullName    InstalDate    .    .    .            .meeehr
> 
> 512                SEB\Administrator . . . . . . ...




In der Datei stehen seeeehr viele Infos drine, musst du halt splitten!


----------



## The_S (18. Jan 2005)

KSG9|plak hat gesagt.:
			
		

> *Start -> Ausführen... -> wmic.exe*



Mein ich ja, hab mich nur vertippt! Ich tests daheim mal aus


----------



## KSG9|sebastian (18. Jan 2005)

jo also wie gesagt..mit der wmic console kriegst du eh so ziemlich alle infos aus windows rausgequält


----------



## The_S (18. Jan 2005)

KSG9|plak hat gesagt.:
			
		

> jo also wie gesagt..mit der wmic console kriegst du eh so ziemlich alle infos aus windows rausgequält



Hmmm, ...

Windows quälen!!!   Die Rache für alle Datenverluste!!!


----------



## KSG9|sebastian (18. Jan 2005)

lol


----------



## The_S (18. Jan 2005)

Juhuuu! Es funktioniert!


```
import java.io.*;

public class zugriff {
	
	public static void main(String[] args) {
		
		try {
			Runtime.getRuntime().exec("cmd /c wmic /OUTPUT:\"%windir%\\temp\\usernames.txt\" useraccount get caption");
		}
		catch (Exception e) {
		}
		int i = 0;
		String[] line = new String[50];
		boolean nochNamen = true;
		try {
			FileReader name = new FileReader("D:\\Windows\\Temp\\usernames.txt");
			BufferedReader nameR = new BufferedReader(name);
			while (true) {
				line[i] = nameR.readLine();
				i++;
			}
		}
		catch (Exception e) {
		}
		for (int z = 2; nochNamen == true; z = z + 2) {
			if (line[z].equals("")) {
				nochNamen = false;
			} 
			else {
				System.out.println(line[z]);
			}
		}
	}
}
```

Danke, Danke, Danke! Hast du noch irgendwelche Verbesserungsvorschläge KSG9|plak?


----------



## KSG9|sebastian (19. Jan 2005)

```
.
.
FileReader name = new FileReader("D:\\Windows\\Temp\\usernames.txt"); 
.
.
```

Ja, ich würd keinen absolute pfadangabe machen. wenn es nicht anders geht dann würde ich auf keinen fall ins windowsverzeichniss schreiben, sondern in irgendnen ordner auf c:\ oder sowas..

ansonsten isses ok, nice 



```
String[] line = new String[50];
```

Warum dass? Mach doch ne Collection und füg mit Collection#add(Object o) Elemente hinzu und benutz nen Iterator


```
Collection user;
.
.
for(Iterator i = user.iterator();i.hasNext())
 System.out.println(i.next());
}
```


Außerdem brauchste dann auch keine "Endlosschleife" mehr verwenden sondern kannst auch mit


```
while(nameR.readLine() != null)
```

die Datei durchparsen


----------



## The_S (19. Jan 2005)

KSG9|plak hat gesagt.:
			
		

> ```
> .
> .
> FileReader name = new FileReader("D:\\Windows\\Temp\\usernames.txt");
> ...



Die absolute Pfadangabe hab ich schon abgeändert, ausversehen aber nicht mitegpostet   


```
FileReader name = new FileReader("%windir%\\Temp\\usernames.txt");
```

Hat ich nur zu Testzwecken drin   ! Den Rest werde ich daheim dann verbessern und testen (scheiß Win 2000). Aber schonmal herzlichen Dank

[edit] Temp in Windows is halt praktisch, deswegen Windowsverzeichnis


----------



## KSG9|sebastian (19. Jan 2005)

ja klar temp verzeichniss, aber halt keinen hardcode auf das verzeichniss sondern ver ENV-Variable


----------



## The_S (19. Jan 2005)

KSG9|plak hat gesagt.:
			
		

> ver ENV-Variable



Versteh ich net


----------



## KSG9|sebastian (19. Jan 2005)

ENV-Variable = Environment-Variable = Umgebungsvariable


----------



## The_S (20. Jan 2005)

Achso, konnt mir nur grad nix drunter vorstellen  :roll:


----------



## KSG9|sebastian (20. Jan 2005)




----------



## The_S (20. Jan 2005)

Hab jetzt noch was geändert damit er wartet bis die Textdatei erstellt ist:


```
try {
			Process getUserNames = Runtime.getRuntime().exec("cmd /c wmic /OUTPUT:\"%windir%\\temp\\usernames.txt\" useraccount get caption");
			getUserNames.waitFor();
		}
		catch (Exception e) {
		}
```

Nur bleibt er dann ewig stehen! Aber es müsste doch eigentlich funktionieren oder?


----------



## The_S (21. Jan 2005)

Hat sich erledigt! Ich überprüf einfach mit


```
File
```

und


```
exists
```

ob das Ding schon da ist


----------



## KSG9|sebastian (21. Jan 2005)

jo is besser..weiß net genau auf was er mit "waitFor.." wartet


----------



## The_S (21. Jan 2005)

Oh man! Ich dreh gleich am Rad!!! Warum zur Hölle geht das nicht?


```
try {
Runtime.getRuntime().exec("cmd /c wmic /OUTPUT:\"%windir%\\temp\\usernames.txt\" useraccount get caption");
}
catch (Exception e) {
}
File pfad = new File("%windir%\\Temp\\usernames.txt");
while (pfad.exists() == false) {
}
```

bzw. weiß jemand warum das hier auch nicht geht?


```
try { 
Process getUserNames = Runtime.getRuntime().exec("cmd /c wmic /OUTPUT:\"%windir%\\temp\\usernames.txt\" useraccount get caption"); 
getUserNames.waitFor(); 
} 
catch (Exception e) { 
}
```

Das ist meiner Ansicht nach alles richtig. Aber das Programm hängt sich immer auf!!! Bin für jede Hilfe dankbar *verzweifel*


----------



## The_S (22. Jan 2005)

Die unendliche Geschichte geht weiter!


```
File pfad = new File("%windir%\\Temp\\usernames.txt");
```

Funktioniert nicht, weil %windir% nur eine Windowsvariable, aber keine Javavariable ist  :meld: ! Blöder Fehler :autsch: ! Hab es jetzt umgeschrieben:


```
String Verzeichnis = System.getProperty("user.dir");
try { 
     Runtime.getRuntime().exec("cmd /c wmic /OUTPUT:\"" + Verzeichnis + "\\usernames.txt\" useraccount get caption"); // Wird später natürlich wieder gelöscht
} 
catch (Exception e) { 
}
File pfad = new File(Verzeichnis + "\\usernames.txt");
while (pfad.exists() == false) {
     System.out.println("Noch nicht da");
}
```

Jetzt wartet er zwar bis die Datei erstellt ist, nicht aber bis die Daten eingefügt wurden. Weiß jemand wie ich schreibe, dass gewartet werden soll, bis alle Daten in die Datei eingefügt sind?


----------



## The_S (22. Jan 2005)

ICH HASSE WINDOWS XP :!:  :!:  :!:   :!:   :!:   :!:   :!:   :!:   :!:   :!:   :!:   :!:  

Das einzige was gefehlt hat ist ein simples


```
start
```

bei


```
Runtime.getRuntime().exec("cmd /c start wmic ...
```

Und deswegen hab ich seit Tagen kein Auge zugemacht  :x  :?  :x

...

Wo ist meine Linux-CD?


----------

