79323
Goto Top

srvcheck über cmd als anderer Benutzer aufrufen

Hallo,

Ich möchte über ein Javaprogramm mir alle Server, sowie deren Freigaben und Berechtigungen ausgeben lassen.
Als gutes Tool habe ich dazu SvrCheck.exe aus dem Windows Resource Kit gefunden und so in Java eingebunden:
Process p2=Runtime.getRuntime().exec("cmd.exe /C srvcheck.exe "+pfad);  
                    BufferedReader in2 = new BufferedReader(new InputStreamReader(p2.getInputStream()));
                    String s2;
                    while((s2 = in2.readLine()) != null)
                    {
                        ta_erg.append(s2+System.getProperty("line.separator"));  
                    }
Leider muss ich dass Programm als Domänenadministrator ausführen um ein geeignetes Ergebnis zu bekommen. Da wir aber 2 Domänen haben, kann ich es nicht über den normalen Benutzer (wer das Programm aufruft) laufen lassen, da er immer nur Administrator von einer Domäne ist.
Jetzt meine Frage, gibt es eine Möglichkeit die Date srvcheck bzw das cmd von einem anderen Benutzer aus zu starten?
Ich habe dazu dies gefunden:
Process p2=Runtime.getRuntime().exec("cmd.exe runas /user:XYQ cmd.exe /C srvcheck.exe "+pfad);  
Leider kommt dabei dann weder eine Fehlermeldung noch sonst irgendetwas. Der Befehl wird anscheinend einfach übersprungen.
Ist etwas an meinem Aufrug falsch oder muss ich vllt auch anders an die Sache ran gehen?

Gruß
seejay

Content-Key: 127449

Url: https://administrator.de/contentid/127449

Printed on: April 19, 2024 at 04:04 o'clock

Member: ITIL-Harry
ITIL-Harry Oct 19, 2009 at 14:04:34 (UTC)
Goto Top
schau Dir mal die Parameter des Befehls RUNAS an

oder starte das Programm über eine Verknüpfung und gib in deren Eigenschaften
die Ausführung unter anderem Account an.

Gruß
ITIL-Harry
Member: DerWoWusste
DerWoWusste Oct 19, 2009 at 22:21:07 (UTC)
Goto Top
Hallo.
Willst Du dem Benutzer ermöglichen, ein Skript als anderer Benutzer zu starten, nutze den Taskplaner. Da kannst Du Konteninformationen einspeichern und den schwachen Benutzer berechtigen, den Task zu starten. Die Ausführung des Tasks wird für ihn unsichtbar sein, es muss also eine Ausgabe in eine DAtei erfolgen, damit er das Ergebnis verwerten kann. Außerdem muss das Skript selbst tunlichst auf einer Freigabe liegen, auf die der Nutzer nur Leserechte hat.
Mitglied: 79323
79323 Oct 20, 2009 at 06:20:37 (UTC)
Goto Top
Hallo,
Vielen Dank schon einmal für eure Mühe.

Zitat von @DerWoWusste:
Hallo.
Willst Du dem Benutzer ermöglichen, ein Skript als anderer
Benutzer zu starten, nutze den Taskplaner. Da kannst Du
Konteninformationen einspeichern und den schwachen Benutzer
berechtigen, den Task zu starten. Die Ausführung des Tasks wird
für ihn unsichtbar sein, es muss also eine Ausgabe in eine DAtei
erfolgen, damit er das Ergebnis verwerten kann. Außerdem muss
das Skript selbst tunlichst auf einer Freigabe liegen, auf die der
Nutzer nur Leserechte hat.

Also jein ;) Unsere Systemlandschaft hat mich zu diesem Schritt gebracht. Also eine Person bei uns hat einen Benutzer als lokalen Admin. Mit diesem ist die Person meistens angemeldet, bzw sollte maximal mit diesem angemeldet sein. Dazu hat die Person 2 weitere Accounts, die jeweils Domänenadmin für eine unserer Domänen ist.
Mein Programm soll jetzt Freigabeordner und Berechtigungen von beiden Domänen auslesen. Dafür müsste aber der jeweilige Domänenadministrator angemeldet sein. Da es 2 unterschiedliche Accounts sind geht es nicht. Damit jetzt nicht der User 3 Programme starten und sich jeweils anders anmelden muss, wollte ich es jeweils mit runas verwirklichen. Der Benutzer gibt seinen Usernamen und Passwort in das Programm und dieses startet im Hintergrund die jeweiligen Domänenabfragen (jeweils mir runas).

Ich hoffe es ist jetzt etwas klarer geworden, was ich machen möchte und wo mein Problem liegt.


@edit:
Beim Schreiben etwas aufgefallen:
Process p2=Runtime.getRuntime().exec("cmd.exe /C runas /user:XYQ \"cmd.exe  srvcheck.exe "+pfad+ "\"");  
Mit dem /C vorne funktioniert es, dass ich die Abfrage nach dem Passwort bekomme. Aber wie kann ich es dann an den Prozess übergeben?
Dachte hier an soetwas
                    Process p2=Runtime.getRuntime().exec("cmd.exe /C runas /user:XYZ \"cmd  srvcheck.exe "+pfad+"\"");  
                    OutputStreamWriter out2 = new OutputStreamWriter (p2.getOutputStream()) {};
                    out2.append("PASSWORT");  
                    out2.flush();
                    BufferedReader in2 = new BufferedReader(new InputStreamReader(p2.getInputStream()));
                    String s2;
                    while((s2 = in2.readLine()) != null)
                    {
                        System.out.println(s2+System.getProperty("line.separator"));  
                    }
Geht aber leider nicht. Wie muss ich da vorgehen?


Gruß
seejay
Member: ITIL-Harry
ITIL-Harry Oct 20, 2009 at 08:47:06 (UTC)
Goto Top
Hi seejay,

evtl. liegt es an der Authentisierung.
In Deinem Script schreibst Du ....... exec("cmd.exe /C runas /user:XYZ \" ........
Versuch es mal mit ....... exec("cmd.exe /C runas /user:Domäne\XYZ \" ........

Wenn ich das richtig verstanden habe möchtest Du domänenübergreifend Infos ermitteln.
Dann musst Du Dich auch mit dem jeweiligen Domänenaccount anmelden.

Alternativ könntest Du Trusts einrichten und die Domänenadmins gegenseitig in die
Domainadmingruppen eintragen.

Gruß
ITIL-Harry
Mitglied: 79323
79323 Oct 20, 2009 at 11:31:40 (UTC)
Goto Top
Hallo,

ne daran lag es nicht. Inzwischen habe ich es jetzt auch hinbekommen. Zwar umständlicher als gewollt aber wenigstens funktioniert es. Daten werden jetzt per srvcheck über cpau aufgerufen und in einer textdaien zwischengespeichert. Dort will ich sie danach wieder einlesen.

Gruß
seejay