37414
Goto Top

Batchdatei auf einem Server ausführen mit psexec.exe

Ich möchte gerne eine Batchdatei auf einem Server ausführen.

Ich habe Adminrechte auf dem Server und kann z.B. auch über die folgende Eingabe im Explorer von meinem Rechner aus auf den Desktop des Servers zugreifen:

\\server1\C$\Users\administrator.ABC\Desktop\

Testweise habe ich auf den Server-Desktop 2 Dateien gelegt

1) test.bat
2) test.txt

Die Datei "test.bat" soll die Datei "test.txt" öffnen.
Das funktioniert auch, wenn ich dies direkt auf dem Server-Desktop ausführe.

Leider funktioniert es nicht, diese Batchdatei (test.bat) von meinem Rechner aus zu starten, obwohl im CMD-Fenster folgendes ausgegeben wird:

C:\Users\administrator.ABC\Desktop\test.bat started on server1 with process ID 10596

Schaue ich danach remote auf den "server1", dann wurde die Datei "test.txt" nicht geöffnet.

Hier der Inhalt meiner Batchdatei, die ich von meinem Rechner aus starte:

@echo off & setlocal

REM psexec \\server1\ -u benutzername -p kennwort "C:\Users\administrator.ABC\Desktop\test.bat"  

REM psexec.exe -d -i -s \\server1\ -u benutzername -p kennwort "C:\Users\administrator.ABC\Desktop\test.bat"  

psexec.exe -d -i -s \\server1\ C:\Users\administrator.ABC\Desktop\test.bat

pause

Wie Ihr seht, habe ich schon verschiedene Möglichkeiten versucht (mir REM davor)... mit Benutzername und Kennwort, mit und ohne Anführungsstriche sowie mit und ohne Angabe "-d -i -s"
Das Ergebnis ist immer gleich. Angeblich wurde der Prozess gestartet, aber wenn ich dann die Remoteverbindung zum Server aus der Taskleiste nach vorne hole, wurde die Textdatei (test.txt) nicht gestartet.

Hat jemand von Euch eine Idee, was ich falsch mache?

Danke und Gruss,
imebro

Content-Key: 326059

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

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: 131381
131381 11.01.2017 aktualisiert um 12:34:45 Uhr
Goto Top
psexec.exe \\server1 -d -i -u Administrator -p kennwort cmd /c "C:\Users\administrator.ABC\Desktop\test.bat"  
Denke daran das der User den du verwendest Zugriff auf "C:\Users\administrator.ABC\Desktop\test.bat" haben muss.

Außerdem, wenn es schon eine Session mit dem in psexec angegebenen User auf dem Server gibt (z.B. eine RDP-Session) wird die Textdatei interaktiv in dieser Session angezeigt und nicht in der Console-Session. Schaue also in den Taskmanager auf dem Server in den Details dann siehst du unter welchem Account die Textdatei geöffnet wurde.

Gruß mik
Mitglied: 37414
37414 11.01.2017 um 13:26:07 Uhr
Goto Top
Da ich selbst der User bin, der zugreift, habe ich ja auch die Berechtigung... denn ich kann es ja auch manuell direkt über Remote auf dem Server ausführen.

Habe es aber auch schon getestet, indem ich die Remoteverbindung erst NACH Start der lokalen Batch-Datei geöffnet habe.
Auch hierdurch änderte sich nichts...

im Server-Taskmanager finde ich überhaupt keinen Hinweis darauf, dass die Textdatei mal geöffnet wurde.

LG
imebro
Mitglied: 131381
131381 11.01.2017 um 13:31:04 Uhr
Goto Top
Zitat von @37414:
im Server-Taskmanager finde ich überhaupt keinen Hinweis darauf, dass die Textdatei mal geöffnet wurde.
"Wurde" auch nicht aber du solltest zumindest einen "notepad" Prozess sehen wenn du die Prozesse aller User einblendest, ansonsten machst du einen grundlegenden Fehler in deiner Batchdatei.
Starte mal nicht die Batch sondern einfach mal nur notepad direkt.
psexec.exe \\server1 -d -i -u Administrator -p kennwort notepad
Das muss gehen, wenn nicht musst du uns mehr über deine genutzte Umgebung erzählen.
Mitglied: 37414
37414 11.01.2017 um 13:52:28 Uhr
Goto Top
ja, ich sehe 4 Mal den notepad-Eintrag.
Habe jetzt auch mal nur "notepad" aufgerufen, wie von Dir gepostet.

Allerdings findet sich in "Details" keine Datumsangabe, wann der Prozess gestartet wurde.
Bei allen 4 sehe ich jedoch im Reiter "Allgemein" jeweils den Eintrag "12. August 2015" bei ERSTELLT und LETZTER ZUGRIFF.

Hmmm... so richtig weiß ich also damit jetzt auch nichts anzufangen face-sad

LG
imebro
Mitglied: 131381
131381 11.01.2017 aktualisiert um 14:04:51 Uhr
Goto Top
Zitat von @37414:

ja, ich sehe 4 Mal den notepad-Eintrag.
Habe jetzt auch mal nur "notepad" aufgerufen, wie von Dir gepostet.
Gut also hat das geklappt, jetzt wurden sie nur im falschen Kontext gestartet und nicht in der Console-Session.

Beachte: Wenn du dich per Remote anmeldest bist du nicht auf der Console-Session! Es muss schon eine Session mit dem Benutzer existieren bevor du psexec startest.

Allerdings findet sich in "Details" keine Datumsangabe, wann der Prozess gestartet wurde.
Bei allen 4 sehe ich jedoch im Reiter "Allgemein" jeweils den Eintrag "12. August 2015" bei ERSTELLT und LETZTER ZUGRIFF.
Interessant ist eher die Spalte wem der Prozess gehört und die Sitzungskennung! Die Spalten kannst du dir zusätzlich einblenden lassen.

Tu uns doch bitte den Gefallen und erzähle uns mehr über deine Umgebung OS etc.

Für mich bei dir alles Verständnisprobleme wie psexec arbeitet.
Mitglied: 37414
37414 11.01.2017 um 14:29:00 Uhr
Goto Top
Soeben habe ich gesehen, dass man auch die Prozess-ID ausgeben kann.
Das habe ich nun eingestellt und sehe dann, dass z.B. die von mir eingangs angegebene ID 10596 dem Abbildnamen "cmd.exe" zugeordnet ist.
Sitzungskennung ist = 1 und Benutzername = SYSTEM.
Von den cmd.exe-Einträgen sind auch mehrere gestartet. Ich vermute also, dass das die Versuche sein könnten, die Batch zu starten...

Mein lokales System ist ein Win 7 Pro mit 64 bit und der Server ist ein Windows Server 2008 R2 Standard mit 64 bit.

LG
imebro
Mitglied: 37414
37414 12.01.2017 um 10:24:55 Uhr
Goto Top
Leider habe ich noch keine Lösung gefunden...
Könnte hier nochmal jemand weiterhelfen?

Danke und Gruss,
imebro
Mitglied: mayho33
mayho33 13.01.2017 um 02:05:44 Uhr
Goto Top
Mitglied: 37414
37414 13.01.2017 um 08:31:49 Uhr
Goto Top
ja klar habe ich mir das schon angeschaut, wie man ja auch im von mir geposteten Code sieht face-wink

Leider funktioniert es nicht und "mikrotik" wollte ja von mir noch weitere Angaben zum System haben, die ich ja auch schon hier gepostet habe. Leider besteht das Problem noch immer und ich würde mich freuen, wenn noch Jemand weiterhelfen kann.

LG
imebro
Mitglied: mayho33
mayho33 14.01.2017 um 03:39:01 Uhr
Goto Top
Also bei mir gehts:

auf der lokalen Maschine cmd.exe öffnen:

Psexec.exe \\<Hostname> -u <full qualified Domainname\UserName> -p <Password> cmd

Auf der RemoteMaschine werden nun 2 Processe ausgeführt: die CMD und PSEXECSVC. Natürlich nicht sichtbar, weil sie in einem anderen Benutzer- Kontext laufen. Das tut dem ganzen aber keinen Abbruch und soll eigentlich so sein.

Nun kannst du in deiner lokalen CMD alle Befehle angeben. Diese werden auf der Remote-Maschine ausgeführt. Z.B.

notepad.exe

oder:

md c:\newFolder
rd c:\newfolder


KA warum das bei dir nicht geht. Alternativ kannst du auch die IP des Remote-Rechners angeben.
Mitglied: 37414
37414 16.01.2017 aktualisiert um 09:05:10 Uhr
Goto Top
Danke Dir für die detaillierte Information.

Ich wollte das ja gerne über eine Batchdatei ausführen, die ich einfach nur mit einem Doppelklick starte.
Diese soll dann auf der Remote-Maschine (Server) einfach nur eine Batchdatei starten, die dort auf dem Admin-Desktop liegt.

Habe Deinen Vorschlag soeben mal mit einer Batchdatei getestet:

Es öffnet sich lokal bei mir die Eingabeaufforderung (cmd).
Ich lande auf der Remote-Maschine im Verzeichnis "C:\Windows\system32"
Um jetzt dort auf den Desktop zu kommen, muss ich zunächst mal eingeben

cd c:\users\administrator.ABC\desktop

Erst jetzt kann ich die Batchdatei auf der Remote-Maschine starten mit der Eingabe "test.bat"

Dann jedoch erhalte ich die folgende Fehlermeldung:

cmd exited on ABC with error code 0.

Zur Information:

Wenn ich direkt am Server auf dem Desktop eine Eingabeaufforderung per "cmd" starte und dort anschließend mit

cd desktop

zum Desktop wechsele, kann ich durch Eingabe von "test.bat" dort problemlos die Batchdatei starten!!

LG
imebro
Mitglied: 131381
131381 16.01.2017 aktualisiert um 09:34:40 Uhr
Goto Top
cmd exited on ABC with error code 0
Das ist keine Fehlermeldung das ist die normale Ausgabe wenn ein Programm/Skript erfolgreich per PSEXEC ausgeführt wurde! Die Ausgabe des Skripts siehst du lokal nicht. Auf dem Remoterechner wird es wie gesagt unsichtbar im Hintergrund ausgeführt wenn es nicht interaktiv starten soll, aber das scheinst du ja noch nicht so richtig zu kapieren.
Mitglied: 37414
37414 16.01.2017 aktualisiert um 09:47:43 Uhr
Goto Top
Zitat von @131381:
...wenn es nicht interaktiv starten soll, aber das scheinst du ja noch nicht so richtig zu kapieren.

Man könnte das sicher etwas netter ausdrücken face-wink
Aber jaaaa... das hatte ich tatsächlich noch nicht so ganz verstanden.

Aber dieser Weg ist mir dann auch zu aufwendig.
Wenn ich zunächst diese lokale Batch starten muss, die wiederum lediglich lokal eine Eingabeaufforderung öffnet, in der ich dann zunächst den Pfad ändern muss (siehe weiter oben) und in der ich erst dann die Batch manuell starten kann... dann ist das definitiv zu viel Arbeit. Dann kann ich auch gleich remote auf den anderen Server zugreifen über die Remoteverbindung und dort manuell die Batch starten.

Offenbar ist es also nicht möglich, von meinem lokalen Rechner aus auf dem Remote-Server eine Batch zu starten, die dann dort automatisch ausgeführt wird.

Zum Verständnis:
Im Grunde wird über die Batchdatei, welche auf dem Desktop des anderen Servers liegt, lediglich ein Dienst gestartet. Man könnte ggf. also auch direkt diesen Dienst starten... oder eben die EXE-Datei, die unter "C:\Programme............." liegt.

LG
imebro
Mitglied: 131381
131381 16.01.2017 aktualisiert um 10:27:39 Uhr
Goto Top
Offenbar ist es also nicht möglich, von meinem lokalen Rechner aus auf dem Remote-Server eine Batch zu starten, die dann dort automatisch ausgeführt wird.
Quark,
natürlich geht das, aber deine Kiste/Server scheint verbastelt zu sein oder der Dienst/was auch immer nicht geeignet zu sein, denn hier geht das wie gesagt einwandfrei.
lediglich ein Dienst gestartet.
Schon mal was von sc oder Powershell oder Taskplaner gehört?
https://www.raymond.cc/blog/remotely-start-and-stop-applications-or-serv ...
Mitglied: 37414
37414 17.01.2017 um 08:14:48 Uhr
Goto Top
Danke Dir...

Ich habe mir das Programm "Yet Another (remote) Process Monitor" installiert. Aber irgendwie komme ich damit nicht so wirklich klar.
Für mich ist nicht ersichtlich, wie ich damit den gewünschten Prozess remote starten kann. Außerdem gibt es das Programm offenbar nur mit englischer Sprache, was es nicht gerade einfacher für mich macht face-smile

Falls sich jemand von Euch damit auskennt, würde ich mich freuen.

LG
imebro
Mitglied: mayho33
mayho33 17.01.2017 um 20:25:10 Uhr
Goto Top
du bis auf der Remotemaschine in einem anderen Userkontext angemeldet. da kannst du nicht einfach mit "sc desktop" auf den Desktop eines Users zugreifen.

warum nicht einfach die Datei unter c ablegen und dann remote ausführen. so wird diese bei dem Benutzer ausgeführt der gerade angemeldet ist.
Mitglied: 37414
37414 19.01.2017 um 14:06:03 Uhr
Goto Top
OK - danke - und soweit verstanden face-smile

Ich erkläre das Problem vielleicht nochmal etwas genauer:

Es handelt sich um eine Software (Aastra) für unsere Telefonanlage.
Diese ist auf dem Server "ABC" installiert.

Manchmal passiert es, dass die Mitarbeiter beim Start ihrer Rechner (Win 7) den Hinweis bekommen, dass die Telefonsoftware (Aastra) nicht erreichbar ist. Dann muss ich mich remote auf diesem Server anmelden und dann den entsprechenden Dienst neu starten.

Das mache ich dann, indem ich eine Batchdatei auf dem Desktop des Servers "ABC" starte.
Diese Batch hat folgenden Inhalt:

@ echo off

REM Start des Aastra UC-Servers
REM Pfad zur EXE-Datei: "C:\Program Files (x86)\Aastra\UCServer\eucsrv.exe" -s  

net start "Aastra UCServer"  

exit

Genau das möchte ich nun so über eine Batchdatei automatisieren, die ich von meinen lokalen Rechner aus starten kann.

Danke und Gruss,
imebro
Mitglied: mayho33
mayho33 19.01.2017 aktualisiert um 15:36:37 Uhr
Goto Top
Auch das sollte sich so lösen lassen. Du musst nur sicherstellen, dass du die Bat mit einem Benutzer ausführst der auf der Remote-Maschine Adminrechte hat.

das geht nicht?

net stop <service>
net start <service>

mit sc kannst nachschauen wie der status des Service ist

Wir legen ein Set von Tools in einem Ordner unter C:\ ab. So kann jeder problemlos darauf zugreifen der die Entsprechenden Berechtigungen hat.