Ich habe einen Taskplaner-Auftrag zum Ausführen von Robocopy zum Sichern lokaler Dateien auf einer Netzwerkfreigabe. Ich muss Domänenanmeldeinformationen verwenden, um auf die Netzwerkfreigabe zuzugreifen, aber der lokale Computer befindet sich nicht in der Domäne, und der Auftrag wird als lokaler Administrator ausgeführt. Diese LösungDas vorübergehende Zuordnen und Aufheben der Zuordnung der Netzwerkfreigabe funktioniert, aber mein Kennwort bleibt für jeden, der sich die Aufgabenaktionen des Taskplaners ansieht, im Klartext sichtbar. Ich würde es vorziehen, das Netzlaufwerk normalerweise semipermanent zuzuordnen, damit der Taskplaner-Job nur Robocopy ausführen und auf den entsprechenden Laufwerksbuchstaben verweisen muss. Ich erhalte jedoch immer die Fehlermeldung "Das System kann den angegebenen Pfad nicht finden." im Robocopy-Protokoll, wenn dies über den Taskplaner ausgeführt wird, obwohl der Befehl an einer Eingabeaufforderung mit erhöhten Rechten ordnungsgemäß ausgeführt wird (Job wird mit den höchsten Berechtigungen ausgeführt). Beachten Sie auch, dass ich diese Registrierungsoptimierung durchgeführt habe, um über eine Eingabeaufforderung mit erhöhten Rechten auf zugeordnete Laufwerke zuzugreifen.
BEARBEITEN: Um zu verdeutlichen, als lokaler Administrator angemeldet, starte ich Windows Explorer als Administrator. Ich ordne die Netzwerkfreigabe dem Laufwerksbuchstaben Y zu. Ich starte die Eingabeaufforderung als Administrator und starte
C:\Windows\System32\Robocopy.exe C:\temp Y:\temp
Funktioniert gut. Ich erstelle einen Taskplaner-Job, um genau denselben Befehl mit den höchsten Berechtigungen auszuführen, unabhängig davon, ob der Benutzer angemeldet ist oder nicht. Ich führe es aus und erhalte eine Fehlermeldung. Ich schreibe in ein Protokoll und bekomme
ERROR 3 (0x00000003) Getting File System Type of Destination Y:\temp\
The system cannot find the path specified.
gefolgt von
ERROR 3 (0x00000003) Creating Destination Directory Y:\temp\
The system cannot find the path specified.
quelle
Antworten:
Zugeordnete Laufwerke sind ein Benutzeroberflächenkonzept und stehen für solche Hintergrundaufgaben nicht zur Verfügung. Greifen Sie über UNC auf das Ziel zu, und stellen Sie sicher, dass der Benutzer, unter dem die Aufgabe ausgeführt wird, Zugriff auf das Ziel hat.
quelle
In meinem Fall musste ich nur das Häkchen entfernen,
run with highest privileges
aber die Aufgabe wird auf demselben Benutzer ausgeführt wie der Benutzer, der das Laufwerk zugeordnet hat.quelle
Versuchen Sie es mit:
innerhalb einer Batch-Datei Ihrer geplanten Aufgabe. Freigegebene Netzwerklaufwerke sind nur in einer vom Benutzer ausgeführten Umgebung verfügbar. Mit "pushd" kann es im Kontext des Skripts ausgeführt werden.
Wenn Sie fertig sind, verwenden Sie:
um die Zuordnung des Laufwerks aufzuheben.
Referenz: https://blog.adrianbanks.co.uk/windows/2007/03/08/accessing-network-file-shares-from-a-command-prompt.html
quelle
Eine andere Möglichkeit ist, nur den vollständigen Netzwerkpfad zu verwenden, da Robocopy diese unterstützt. dh robocopy c: \ temp \\ server \ share \ temp
Oder noch besser, führen Sie die Sicherung auf dem Server selbst aus. Erstellen Sie ein Domänenadministratorkonto nur für den Sicherungsvorgang. Feed Robocopy das Kennwort aus einer Textdatei, auf die nur Domain-Administratoren zugreifen können.
Vor Jahren habe ich mehrere .cmd-Skripte erstellt, mit denen wichtige Dateien für jedes System im Netzwerk auf diese Weise gesichert wurden. Das einzige externe Programm, das ich verwendete, war Cgywins Grep-Befehl und ein SMTP-Mail-Absender mit Eingabeaufforderung.
Ich habe ein Skript erstellt, das das Netzwerk nach Systemen durchsucht. Es würde eine Textdatei mit allen Systemnamen erstellen und mich per E-Mail über alle neu gefundenen Systeme benachrichtigen. (Ich hatte eine Konfigurationsdatei, die zum Überspringen von Systemen analysiert werden sollte.) Auf jedem neuen System wurde ein Sicherungsverzeichnis erstellt und eine Sicherungskonfigurationsdatei darin abgelegt. Der Benutzer kann diese Datei ändern und alle Verzeichnisse auflisten, die gesichert werden müssen. Sie könnten auch die Zeit für ihre Backups angeben, damit dies nicht passiert, wenn sie im Büro sind. Ich habe dieses Skript alle 5 Minuten auf dem Server ausgeführt, da es keine Verarbeitungszeit in Anspruch nahm und mir die Sicherheitsfunktion gefällt, die mich benachrichtigt, wenn ein neues System an das Netzwerk angeschlossen wurde.
Ein anderes Skript analysiert alle einzelnen Sicherungskonfigurationsdateien und plant eine Aufgabe, um eine Sicherung auf diesem System auszuführen. Dies wurde täglich um 00:01 Uhr durchgeführt.
Schließlich analysierte das Sicherungsskript die Konfigurationsdatei, die vom Scheduler übergeben wurde, und kopierte mithilfe von Robocopy alle Dateien. Ich hatte eine vollständige Fehlerüberprüfung der Konfigurationsdateien, da die Benutzer sie bearbeiten und bei Problemen E-Mails erhalten würden.
Die Benutzer konnten ihre Sicherungsdateien lesen, die Sicherung jedoch nicht löschen. Dies bot einen gewissen Schutz vor Schäden durch einen möglicherweise verärgerten Mitarbeiter.
Wahrscheinlich hätte in .vbs oder Powershell etwas viel Eleganteres gemacht werden können, aber ich bin kein wirklicher Programmierer. Meine Programmierkurse umfassten Cobal und JCL. Ich erinnere mich, dass ich die Skripte beim Verlassen kopiert habe, aber wer weiß, wo sie jetzt sind.
quelle
Ich habe das Problem behoben, indem ich die Option "Ausführen, ob Benutzer angemeldet ist oder nicht" in "Nur ausführen, wenn Benutzer angemeldet ist" geändert habe. Versuchen Sie dies, es kann Ihnen helfen.
quelle
Durch das Erstellen dieses Powershell-Skripts, das Planen des Jobs als SYSTEM und das Festlegen, dass er beim Neustart ausgeführt wird, konnte ich Laufwerksbuchstaben in meinen Skripten verwenden, da UNC aufgrund anderer Probleme keine Option ist.
quelle
cmd /c net use
vor dem Eintrag für den Kopierauftrag in der Aufgabe einen Auftragseintrag hinzugefügt und das hat mein Problem behoben. Ihr Beitrag war der erste nach vier Stunden, der auf vorgeschlagene Spiegelkonten stieß, die eine einfache Lösung darstellten. Mach weiter so!\\ServerName\ShareName
in dieser Art von Logik beibehalten . Darüber hinaus muss dies nicht unbedingt PowerShell sein, daNET USE
die Ausführung auch über Batch erfolgt. Soweit Sie die Zeitplanung mit dem Taskplaner als SYSTEM-Konto durchführen, können Sie dies unabhängig von der Art des Skripts, der Logik usw. tun, die Sie für die Ausführung über Task planen Planer.NET USE \\<ServerName>\<ShareName> <password> /user:<domain>\<username>
dass Sie zur Verdeutlichung auch einfach so verwenden können und keinen Laufwerksbuchstaben angeben müssen, wenn die Authentifizierung allein für die Freigabe erforderlich ist und nicht der tatsächliche Laufwerksbuchstabe.Versuchen Sie, die Position "Start in" in "c: \" zu ändern. Dies schien das Problem für mich zu beheben, sodass das System möglicherweise die Ausführung der Datei cmd.exe aus dem Standardverzeichnis \ windows \ system32 \ als Sicherheitsfunktion verhinderte.
quelle
Ich hatte das gleiche Problem beim Versuch, auf r: /xxxfilename.txt mit einem Windows-zugeordneten Laufwerk r: \ server \ share zuzugreifen, wenn ich ein Skript vom Windows- Taskplaner aus aufrufe .
Ich habe das Problem mit //server/share/xxxfilename.txt gelöst.
Bitte beachten Sie, dass der Back-Slash in Forward-Slash umgewandelt wurde.
Jetzt läuft mein Bash-Cygwin-Skript im Windows-Taskplaner und in der Cygwin-Shell.
Hinweis: Der Befehl " net use " kann auf die Kartenlaufwerke in der Shell zugreifen, zeigt jedoch Nicht verfügbar R: an, wenn ich diesen Befehl im Windows-Taskplaner ausführe.
quelle
Wie ein anderer Benutzer bemerkte, funktioniert es anscheinend nicht, die Option "Ausführen, ob Benutzer angemeldet ist oder nicht" auf "Nur ausführen, wenn Benutzer angemeldet sind" zu setzen. Sie können dann entweder den zugeordneten Pfad (z. B. Z :) oder den Serverpfad (z. B. \\ Servername \ Pfad) verwenden.
Wenn Sie diese Option verwenden, müssen Sie natürlich die angegebenen Schritte ausführen und sicherstellen, dass Sie sich als Benutzer mit Zugriff auf das entsprechende Laufwerk am Server angemeldet haben. Ich erinnere mich, dass ich in einem älteren Unternehmen mit einer Reihe solcher Jobs tätig war. Eines Tages "meldete" sich jemand vom Hauptjobserver ab und erwartete nicht, dass dies irgendwelche Auswirkungen haben würde, da er die Maschine in keiner Weise herunterfuhr ...
Außerdem führt Windows heutzutage häufig selbst aufgerufene Systemneustarts durch. Verwenden Sie diese Lösung daher auf eigenes Risiko.
quelle
Beachten Sie außerdem, dass, wenn Sie die Zuordnung im Skript vornehmen und das Kennwort% enthält, %% geschrieben werden muss, damit das Skript vom Taskplaner aus funktioniert,% jedoch von der Eingabeaufforderung aus
quelle
Sie können die folgenden Befehle verwenden, die im Stapelskript selbst hinzugefügt werden, um das Stapelskript über die Windows-Zeitplanaufgabe auszuführen und die Datei mit der Windows-Zeitplanaufgabe auf das lokale System zu kopieren. Nettonutzung Y: "\\ xxx \ xxx \ xxx cd / d Y: Nettonutzer / d Y: / Y
quelle
Vielen Dank, ich denke, dass mit "Start in c: \" mein Problem behoben wurde. Ich werde dieses Problem verfolgen, um zu bestätigen, dass es behoben ist.
Ich hatte das gleiche Problem, wenn ich direkt auf Batch klickte, lief es fehlerfrei, aber nicht unter geplanten Aufgabe.
quelle