naedil
Goto Top

Robocopy-Batch lässt sich per VB-Script über Aufgabenplanung unsichtbar starten - aber nicht beenden

Hallo an alle,

ich habe eine Frage zu RoboCopy (System: Windows 7 Prof.); hier kurz die 'Vorgeschichte':
Ich verwende derzeit RoboCopy zum Monitoren und Synchronisieren eines Verzeichnisses. Geänderte Dateien werden so in ein verschlüsseltes Verzeichnis auf dem gleichen Rechner kopiert (die verschlüsselten Daten werden später durch andere Prozesse nach außen synchronisiert).

Zur Automatisierung wollte ich die RoboCopy-Synchronisation ursprünglich als Dienst einbinden. Dies scheiterte jedoch an meinem Wunsch, für jeden Tag ein getrenntes Logfile zu erzeugen. In einer Batchdatei kann hierfür die %date% - Umgebungsvariablen abgefragt werden. Als Start-Parameter beim Einrichten eines Dienstes kann ich dies jedoch nicht übergeben, da der Parameter hierfür (/LOG+:"c:\Logfiles\RoboCopy.%date:~-4%-%date:~-7,2%-%date:~-10,2%.log") in der Form nicht vom Dienst verarbeitbar ist; jedenfalls scheiterte der Dienststart damit jedesmal. Vielleicht muss der Syntax dann auch angepasst werden - ich hab's nicht hinbekommen... Leider kann auch in einer RoboCopy-Job-Datei nicht mit Variablen gearbeitet werden, sonst hätte ich mir den Pfad variabel aus der Job-Datei geholt.

Deshalb bin ich zum Aufgabenplaner gewechselt und starte den RoboCopy-Prozess nun hier beim Einloggen in den Benutzeraccount (mit etwas Wartezeit). Damit das ganze unsichtbar erfolgt, verwende ich hierfür VB-Script:

Set WshShell = WScript.CreateObject("WScript.Shell")
sDate = Year(Now) & "-" & Month(Now) & "-" & Day(Now)
sLogfile = "c:\Logfiles\RoboCopy." & sDate & ".log"
Return = WshShell.Run("C:\Windows\system32\robocopy.exe /JOB:""PfadZurJobdatei.rcj"" /LOG+:" & sLogFile, 0, True)

Sowohl der nicht sichtbare Aufruf des Prozesses und auch das Schreiben in eine Logdatei mit variablen Namensteil funktioniert damit prima.

Was jetzt noch stört: Das (manuelle) Beenden der Aufgabe im Aufgabenplaner bewirkt leider nicht, dass der RoboCopy-Process beendet wird. Die Aufgabe steht dann zwar als "Beendet", jedoch läuft RoboCopy noch und hält auch den Zugriff auf die Logdatei.

Gibt es eine Möglichkeit, die Umsetzung zu verbessern, so dass über den Aufgabenplaner auch ein sauberes Beenden des Prozesses erfolgt?

Vielen Dank,
Daniel

Content-Key: 252763

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

Printed on: April 18, 2024 at 05:04 o'clock

Mitglied: 114757
Solution 114757 Oct 22, 2014 updated at 20:13:45 (UTC)
Goto Top
Hallo Daniel,
starte das Script im Taskplaner doch mit einem anderen Useraccount. Dann ist es erstens für den gerade angemeldeten User sowieso unsichtbar und wenn du Robocopy so aufrufst
cmd /c robocopy .......
kannst du auch deine Datums Umgebungsvariablen in der Zeile nutzen, oder schreibst das alles in eine Batch.

Beim Beenden des Tasks wird dann auch dein Script beendet.

Gruß
jodel32
Member: Naedil
Naedil Oct 22, 2014 updated at 20:04:35 (UTC)
Goto Top
Hallo Jodel32,

super, vielen Dank.
Ich habe als Programm nur "cmd" eingetragen, die Parameter sind dann:
/c "C:\Windows\system32\robocopy.exe" /JOB:"c:\PfadZumJobfile\Jobfile.rcj" /LOG+:"c:\PfadZumLogfile\RoboCopy.%date:~-4%-%date:~-7,2%-%date:~-10,2%.log"

Ich verwende ein anderes Benutzerkonto, das Fenster bleibt unsichtbar und beim Beenden der Aufgabe, wird auch der RoboCopy-Prozess nun beendet. Die dynamische Bennung des Logfiles mit aktuellem Datum klappt auch. face-smile

Zum Benutzerkonto hätte ich noch eine Frage: Ich habe hier jetzt das Administratorkonto verwendet, da ich sonst kein weiteres anders Benutzerkonto habe. Ist das bzgl. der Rechte bedenklich und sollte ich daher noch ein anderes Userkonto für solche Aufgaben anlegen, oder kann ich den Adminaccount verwenden?

Viele Grüße, Daniel
Mitglied: 114757
114757 Oct 23, 2014 updated at 07:21:53 (UTC)
Goto Top
Ist das bzgl. der Rechte bedenklich und sollte ich daher noch ein anderes Userkonto für solche Aufgaben anlegen, oder kann ich den Adminaccount verwenden?
Hallo Daniel,
ist eigentlich Jacke wie Hose, wenn jemand auf dein System physischen Zugriff hat wird er an jede Zugangsdaten kommen, egal ob du nun einen anderen Account oder den Admin-Account benutzt. Am besten ist es natürlich immer einen Account nur mit den Rechten auszustatten, die das Script tatsächlich benötigt. bei Bedarf lässt sich dieser Nutzer ja dann auf der Anmeldeseite via Registry-Eintrag ausblenden.

Gruß
jodel32