# Administration von Software auf Clients im Netzwerk



## tobi88 (17. Jun 2009)

Mooooorgen !!!!

ich möchte gerne eine Software entwickeln, die mir anzeigt, welche Software ich auf einem bestimmten client installiert habe. alle clients befinden sich in einer windows active directory umgebungen.

die anwendung soll so aufgebaut werden, dass man eine ip oder einen computername ins programm eingibt und das programm sucht dann alles zusammen und erstellt mir einen bericht. es sollen auch noch zusätzlich informationen über den client ausgeben werden, wie zb mac, service pack und auch hardware.

nun ist meine frage, wie ich dies am besten umsetzen kann? und wie kann ich mich auf einen pc verbinden und diese daten auslesen?

meine erste idee ist es, nach bestimmten dateien über die windowsfreigaben zu suchen. mit dem administrator kann ich bespielweise bequem mir die verstecken freigaben anschauen, wie c$ oder d$. dies würde aber zu sehr zeit in anspruch nehmen 

meine zweite idee ist es, die registry des jewahligen cliens auszulesen. aber dort wird leider nicht jede software registriert 

weitere idee habe ich zur zeit leider nicht. ich bin für jede hilfe dankebar 

gruß
tobi


----------



## hiti (18. Jun 2009)

Hallo Tobi,

du gehst also davon aus, das der Client auf einem windows Rechner läuft?
Die Programme eines angemeldeten Users stehen ja bei xp u.ä. unter

C:\Dokumente und Einstellungen\<user>\Startmenü\Programme

Könntest du nicht über eine Systemvariable "C:\Dokumente und Einstellungen\<user>" ermitteln? Sowas wie %home% in Batchdateien ?!

Gruss, hiti


----------



## tobi88 (18. Jun 2009)

Richtig - auf allen Rechner läuft Windows. Sie sind auch alle an einer Domäne angebunuden. 
Es soll auch Software ermittelt werden, die nicht "richtig Installiert" wird, das heißt dass die Software von einem Stick kopiert wird oder der Installtionswizard nur zum entpacken gedacht ist.
Es wird wohl darauf hinnaus laufen, wie du es gesagt hast hiti, dass ich nur bestimme ordner durchsuchen werde und alle exen ausgebe.


----------



## tuxedo (18. Jun 2009)

Was ist mit installierten oder kopierten Java Programmen? 

Was wenn die nicht als JAR vorliegen (was sich einfach finden und zuweisen lässt), sondern als Classfiles? Dann ist die Suche extrem schwer und aufwendig. 

Was ist mit Programmen die per Verschlüsselungstool auf einem virtuellen Pseudo-Laufwerk liegen? 
Was ist mit Programmen die gar nicht lokal vorhanden sind sondern nur übers Netz ohne Laufwerkmapping gestartet werden?

Denke nicht dass du eine 100%ige Abdeckung deines Reports bekommst. Frei ins Blaue geschätzt wirst du nicht über 70-80% kommen.

Die ganze Platte zu durchsuchen und jede Datei anzuschauen kostet je nach Plattengröße viel Zeit und "stresst" wohlmöglich noch den Rechner. 

Könnte mir auch vorstellen dass es, für M$ Windows Rechner schon ein ähnliches Administratives Tool gibt. Hast du da schon mal gegoogelt?

- Alex


----------



## tobi88 (19. Jun 2009)

Es gibt ein Tool für Windows und zwar das AdvancedRemoteInfo (ARI). Dieses finde ich auch sehr schön und ist teilweise auch schon im Einsatz. Es besteht noch bedarf an weiteren Funktionen, die das Programm nicht unterstützen. 

Das Problem mit dem stressen und der goße Zeitaufwand liegt mir auch quer im Magen. Ich werde wohl die meinsten Informationen aus der Registry auslesen. Dies geht sehr flott  Habe jetzt fast das komplette ARI nachgestellt. 

Auslesen der Registry mache ich zur Zeit mit reg. reg ist ein windows-tool, welches gleich mit installiert wird. Ich kann mit dem Tool wunderbar die registry der anderen benutzer auslesen. es ist echt aufwendig sich durch die registry zu wühlen und die werte sich zusammen zu suchen -.-

Kennt ihr noch eine andere Möglichkeit die Registry von einem anderen Rechner auszulesen? Gibt es von Java auch eine Möglichkeit?

Habe im Netz eine kleine Klasse gefunden:

```
import java.util.prefs.Preferences;

public class Reg 
{
	String Item;
	String myName;
	static Preferences prefs;
	
	//Name des Programms, Name des Kontens, in welchen gespeichert wird.
	public Reg( String Node, String Name ) {
		
		//Registry wird gelesen
		prefs = Preferences.userRoot().node( "HKEY_Current_USER\\Software\\JavaSoft\\" + Node);
		myName=Name;
		Item=prefs.get(Name, null);
	}
	
	//Item auslesen
	public String getItem() {
		return Item;
	}
	
	//Speichern
	public void SaveItem(String Item) {
		this.Item = Item; 
		prefs.put(myName, Item);
	}
}
```

Ich weiß jetzt aber nicht, ob ich damit auch auf einen anderen Rechner drauf zugreifen kann. Habe dafür leider noch nichts gefunden 

Die 2 weiteren Punkte, wie ein Programm gestartet werden kann, werde ich durchdenken. da fällt mir bestimmt was ein. 

Gruß
Tobi


----------



## tuxedo (19. Jun 2009)

Mit Java remote auf die Registry eines anderen Rechners zugreifen wird wohl nicht ohne Java Server/Client auf dem Zielrechner möglich sein.

Außer Windows bietet dafür eine Netzwerkschnittstelle die man anzapfen kann. Wenn man "regedit" öffnet gibts zumindest bei mir unter "File" einen Menüeintrag "Connect Network Registry".

- Alex


----------



## tobi88 (19. Jun 2009)

Schade, dass es wohl nicht mit Java funktioniert. Gibt ja zum Glück von M$ Schnittestellen 

Beispiel lokal:

```
REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal
```
Damit lese ich den Pfad für den angemeldeten Benutzer aus. Hier kann man alle Stammbäume verwenden.

Beispiel entfernter Computer:

```
REG QUERY "\\ClientName\HKU oder HKLM\Pfad"
```
Damit greife ich auf einen anderen Computer drauf zu. Ich kann aber nur den HKU und den HKLM auslesen.

Gruß
Tobi


----------

