Batch psexec und robocopy

Nightmare85

Captain
Registriert
Apr. 2007
Beiträge
3.557
Hallo,

obwohl ich sowohl viel mit psexec als auch mit robocopy arbeite, habe ich es nicht hinbekommen, beide in einer Zeile unterzubringen.
In diesem Szenario gibt es:
  • Mein Arbeits-PC
  • PC1 (erreichbar über Internet)
  • PC2 (ebenfalls erreichbar über Internet)
  • PC1 und PC2 sind im gleichen lokalen Netzwerk

Mein Ziel ist es, einen Ordner von PC1 auf PC2 zu kopieren.

Hab den Arbeits-PC jetzt aus, aber der Befehl war in etwa:
Pfad zur psexec -u Benutzer - p Passwort -s -d cmd /c robocopy "c:\Pfad" "12.34.56.78\c$\Pfad" mt:2 /E

Wenn ich über VNC auf PC1 gehe und den robocopy Befehl in der cmd ausführe, geht es.
Starte ich mit psexec einen Prozess auf PC1, dann funktioniert dies ebenfalls.
Nur die Kombination aus beiden klappt nicht.

Wenn ich über den Total Commander von PC1 auf PC2 kopiere, dauert es ewig, da es anscheinend über Internet geht.
Per VNC geht es hingegen super schnell.
Daher meine Idee mit psexec und robocopy.

Danke für jede Hilfe und viele Grüße
 
robocopy geht in beide Richtungen
Due kannst auch vom Arbeitspc aus sagenn welche daten er zu dir holen soll, anstatt entfernt darauf einen befehl abzusetzen, der die daten in deine Richtung schickt
HIlft das, oder soll das auf jeden Fall so wie du es gerade vor hast passieren?
 
Nightmare85 schrieb:
Pfad zur psexec -u Benutzer - p Passwort -s -d cmd /c robocopy "c:\Pfad" "12.34.56.78\c$\Pfad" mt:2 /E
Das sieht komisch aus. Schlecht abgetippt? Da fehlen mindestens 2x \ und 1x / und evtl. noch irgendwelche Anführungszeichen oder Hochkommas.
 
  • Gefällt mir
Reaktionen: tollertyp und BFF
Bring das „robocopy“ in eine Batch und führe das aus. In Theorie wird die Batch zum PC befördert wo PSEXEC das ausführen soll.
Oder leg die Batch gleich da an und lass PSEXEC das ausführen.
 
Grundsätzlich erstmal der Hinweis, dass man zu einem Problem/Fehler auch entsprechende Fehlermeldungen postet. "Klappt nicht" ist in keinster Weise hilfreich.

Wie dem auch sei, das Problem wird psexec und der Benutzer sein unter dem Robocopy remote ausgeführt wird. Der Netzwerkpfad ist mutmaßlich nicht verbunden und deswegen schlägt robocopy auch fehl.
 
Danke erstmal für die Hilfe.

Die Syntaxfehler oben sind, weil ich grad ausm Kopf getippt hab.

Eine Fehlermeldung gibt es nicht.
Es steht, dass cmd.exe erfolgreich auf dem Ziel-PC ausgeführt wurde.

Ich komme auf beide PCs über Internet drauf und beide PCs sind direkt miteinander verbunden.
Ich komme also auch über VNC auf PC1 und über dessen Windows Explorer auf PC2.

Grüße
 
@Raijn: Du hast noch vergessen zu kritisieren, dass man nicht "in-etwa-Befehle" angeben sollte.
 
  • Gefällt mir
Reaktionen: Raijin, Nightmare85 und madmax2010
Noch eine Frage:

Der Befehl, der auf dem zweiten PC funktioniert, ist 1:1 und nicht in etwa als Argument bei psexec übergeben bei deinen Versuchen?
 
Nightmare85 schrieb:
Ich komme also auch über VNC auf PC1 und über dessen Windows Explorer auf PC2.
Das spielt keine Rolle. Führe über psexec mal Folgendes aus:

net use >> c:\netuse.log

Ich gehe stark davon aus, dass die Netzlaufwerke auf nicht verbunden o.ä. stehen, wenn sie überhaupt dort auftauchen. Du kannst versuchen, RoboCopy in einer batch auf dem Ziel-PC auszuführen und innerhalb der Batch machst du davor ein "net use \\server\freigabe /user:blauser blapasswort" aber selbst damit tut sich psexec teilweise schwer.
 
Hallo,

ok, hab nochmal nachgeschaut.

psexec -u Benutzer -p Passwort \\12.34.56.78 -s -d cmd.exe robocopy "C:\Pfad" "\\23.45.67.89\c$\pfad" /MT:2 /E

Beim Ausführen des Befehls von meinem PC aus steht:
cmd.exe started on 12.34.56.78 with process id.

Andere Varianten waren:
psexec -u Benutzer -p Passwort \\12.34.56.78 -s -d cmd.exe "robocopy "C:\Pfad" "\\23.45.67.89\c$\pfad" /MT:2 /E"

psexec -u Benutzer -p Passwort \\12.34.56.78 -s -d cmd.exe "robocopy C:\Pfad \\23.45.67.89\c$\pfad /MT:2 /E"

Die Datei kam nie an.

Grüße
 
Jetzt mal sau dumm gefragt: Die Rechner sind doch in einem Netzwerk?
a) warum nimmst du IPs und nicht die Rechnernamen?
b) warum anonymisiert du die IPs auch noch?
c) wozu braucht es eigentlich das cmd.exe?

Welchen Befehl hast du lokal ausgeführt? Auch mit "cmd.exe robocopy ... "?
Warum soll das auch funktionieren?
Funktioniert denn das wie man "will"? Nööööö...
1677531261960.png


Wenn dann vielleicht cmd.exe /C aber wozu?
1677531364236.png


das /C war übrigens bei den in-etwa-Befehlen noch drin ... jetzt wieder draußen? Sind halt wieder in-etwa-Befehle...

Aber man kann Fragen auch ignorieren und beten dass Wunder passieren.
 
Der Zugriff auf den Ziel-PC muss per Remote erfolgen.
Mit psexec kenne ich mich nicht aus.
Vielleicht funktioniert es in einer Konstellation mit net use, PowerShell und robocopy.

Hier mal auf die Schnelle ein Vorschlag, allerdings ungetestet:

PowerShell:
$Source = "C:\Pfad"
$Target = "12.34.56.78\c$\Pfad"
$User = "$Env:USERNAME"
$Pass = "Password"
$RobArgs = "/mt:2 /E"
New-Alias -Name NetUse
net use "\\$IPCHost\IPC$" /u:$User $Pass
robocopy "$source" "$Target" $RobArgs.Split(' ')
# IPC$ Verbindung ggf. löschen
net use "\\$IPCHost\IPC$" /D
 
Zuletzt bearbeitet von einem Moderator:
tollertyp schrieb:
Jetzt mal sau dumm gefragt: Die Rechner sind doch in einem Netzwerk?
a) warum nimmst du IPs und nicht die Rechnernamen?
b) warum anonymisiert du die IPs auch noch?
c) wozu braucht es eigentlich das cmd.exe?

Aber man kann Fragen auch ignorieren und beten dass Wunder passieren.

Guten Tag,

a)
In wie fern spielt das eine Rolle?
Die IPs sind mir bekannt und wenn ich den robocopy-Befehl lokal über die cmd.exe ausführe, funktioniert es einwandfrei.

b)
Wo liegt das Problem?

c)
Über die cmd.exe starte ich robocopy mit Argumenten, um auf deine Frage im anderen Post einzugehen.

Sorry, aber Vllt hast du es nicht gemerkt:.
Ich kenne mich mit dieser ganzen Thematik nicht so gut aus, also bitte in die Sicht eines (fortgeschritten) Anfängers versetzen.

Und nein, ich habe deine Frage nicht ignoriert sondern hatte noch keine Zeit gehabt, darauf einzugehen.

@NotNerdNotDau
Danke, aber PowerShell steht hier leider nicht zur Verfügung.

@Raijin
net use >> c:\netuse.log = leere log-Datei

Bezüglich VNC:
Von PC1 tippe ich \\Ip von PC2\ in die Adressleiste vom Windows Explorer
Ich sehe kein separates Netzlaufwerk im Arbeitsplatz

Bezüglich Batch:
Auf den Zielsystemen ist das Ausführen von Batches eingeschränkt - müssen vorher freigeschaltet werden.
Daher also cmd.exe mit Argumenten.

Ich hoffe, das Hauptproblem ist die Syntax.

Grüße
 
Wichtig ist, dass @Nightmare85 erstmal prüft ob das Netzlaufwerk als solches überhaupt via psexec verfügbar ist. Wenn nicht, ist es unerheblich ob PowerShell oder cmd/batch zum Einsatz kommt. Füttert man google mit den Suchbegriffen "psexec" und "net use" findet man zahlreiche Ergebnisse, die eben solche Probleme thematisieren, zB hier.


Nightmare85 schrieb:
net use >> c:\netuse.log = leere log-Datei
Ich mache sowas grundsätzlich nur in Batch-Dateien auf dem Zielsystem, weil komplexe oder gar mehrere Kommandos über psexec nicht unproblematisch sind. psexec ist für das remote-Ausführen eines einzelnen Befehls gedacht, nicht mehr und nicht weniger. Gerade bei vielen "" muss man wirklich aufpassen, weil psexec etwaige Parameter für den eigentlichen Befehl gegebenenfalls nicht als solche interpretiert und gar nicht oder falsch überträgt. Am Ende führst du vielleicht die ganze Zeit einfach nur ein leeres cmd aus.
Deswegen packe ich die Kommandos grundsätzlich zB in eine "c:\pscmd.bat" auf dem Zielsystem und führe über psexec ganz banal nur eben diese "c:\pscmd.bat" aus, egal ob da nur ein Kommando drin ist oder eine komplexe Batchdatei mit Dutzenden von Befehlen.

Wenn batch-Dateien auf dem Zielsystem reglementiert sind, muss dies eventuell aufgehoben werden, zumindest für die genutzte(n) Batch(es). Mindestens für einen Test würde ich das machen, weil du durch immer wieder denselben Input kaum zu einer Lösung kommst. Batch freischalten, robocopy-Befehl dort eintragen (ggfs mit einem net use \\... davor") und dann via psexec ausführen. Klappt es, weißt du immerhin, dass es grundsätzlich funktioniert.


Nightmare85 schrieb:
Bezüglich VNC:
Von PC1 tippe ich \\Ip von PC2\ in die Adressleiste vom Windows Explorer
Ich sehe kein separates Netzlaufwerk im Arbeitsplatz
Das siehst du dort auch nicht, weil es dynamisch erstellt und nach einer gewissen Inaktivität wieder gelöscht wird. Mit "net use" sieht man es in der Regel, dann aber meist ohne Laufwerksbuchstaben. Letzteren weist Windows nur dann automatisch zu, wenn man in der Kommandozeile zB "cd \\server\freigabe" macht.

VNC eignet sich aber nicht als Beweisführung, weil das zwei Paar Schuhe sind. Via VNC bedienst du das Zielsystem direkt. Der VNC-Server simuliert auf dem Zielsystem die Mausklicks, die du im Client-Fenster auf deinem PC machst und überträgt banal ausgedrückt ein paar Screenshots als Rückmeldung. psexec ist ein tatsächlicher - wenn auch rudimentärer - Fernaufruf eines Kommandos, gaaaaaaaaaaanz entfernt verwandt mit einem ssh-Zugang unter Linux. Heißt: Für Windows sieht ein VNC-Klick aus als wenn du vor dem Bildschirm hockst und mit der Maus klickst, während Windows bei psexec einen echten Remote-Zugriff registriert und unter Umständen eben auch gewisse Zugriffe erlaubt oder blockiert. Insbesondere bei Netzlaufwerken ist es oftmals so, dass diese als "unavailable" o.ä. angezeigt werden, weil Windows den Zugriff via psexec blockiert.

Mach doch einfach mal die Gegenprobe und lass robocopy via psexec von C:\aaa\ auf C:\bbb\ kopieren. Wenn das klappt und mit \\server\freigabe als Quelle oder Ziel nicht, sieht man, dass nicht robocopy selbst das Problem ist, sondern der Netzwerkpfad bzw. die dazugehörige Authentifizierung.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: -byTe-
Nightmare85 schrieb:
Danke, aber PowerShell steht hier leider nicht zur Verfügung.
Okay, schade.

Was mir an dem Code mit psexec aufgefallen ist und merkwürdig erscheint, ist "cmd".
Muss das bei der Verwendung von robocopy da rein?

Dann noch die Vermutung, dass der Pfad des Ziel-PC als UNC-Pfad angegeben werden muss, mit vorangestellten \\ und dem Domainnamen.
Wie genau das in einer Batch aussehen muss, weiß ich nicht. Ich nutze vornehmlich PS und könnte das, wenn ich zuhause am PC bin, relativ problemlos umsetzen.

Aber wenn PS für dich nicht in Frage kommt, dann muss du es halt auf andere Weise umsetzen.
Irgendwann klappt es, man braucht dafür nur viel Geduld und muss u.U. sehr viel testen.:D
Viel Erfolg.
 
Soll das regelmäßig kopiert werden? Wäre evtl. das Anlegen eines Scheduled Tasks auf einem der beiden PCs eine Möglichkeit? Dann würde das Konstrukt mit psexec wegfallen.
 
Nightmare85 schrieb:
Bezüglich Batch:
Auf den Zielsystemen ist das Ausführen von Batches eingeschränkt - müssen vorher freigeschaltet werden.
Daher also cmd.exe mit Argumenten.
was heißt das?
Und warum muss dazu cmd.exe geschrieben werden und warum geht nicht robocopy direkt?
Wie sieht der Befehlt denn 1:1 aus?
Ich fragte explizit wozu es das cmd.exe braucht, darauf hast du aber auch explizit nicht geantwortet.

Und nein, einige meiner Fragen spielen wirklich keine Rolle, aber das Verändern von Befehlszeilen ist halt auch nichts, was wirklich hilft

Es soll, ich weiß ich rede wieder ganz verrücktes Zeugs, auch die Möglichkeit geben einen Screenshot zu machen und dann Dinge daraus zu "entfernen", indem man sie mit farbigen Flächen überdeckt. Das würde zumindest besser zeigen, wie der Befehl real aussieht, als dieses in-etwa-Zeugs.,
 
Zurück
Oben