Warum kann ein Taskplaner-Job nicht auf ein zugeordnetes Netzlaufwerk zugreifen?


27

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.

Enthält Ihr lokaler Pfad oder Netzwerkpfad Leerzeichen? Wenn ja, kapseln Sie den Pfad mit doppelten Anführungszeichen am Anfang und Ende des Pfads ein?
So,

@SunWKim Kein Leerzeichen in einem der Pfade.
Craig W

Mit welcher Befehlszeile führen Sie die Sicherung vom lokalen zum Netzwerk durch? Auf welcher Netzwerkfreigabe sichern Sie? Ich denke, dass die Netzwerkfreigabe möglicherweise nicht verfügbar (nicht verbunden) ist, wenn Sie den Sicherungsbefehl ausführen.
So

Läuft es als Ihr Benutzer oder nur als "Administrator"? Wenn es sich um Ihren Benutzer handelt, ist das Laufwerk Ihrem Benutzer dauerhaft zugeordnet?
Nick

@SunWKim Ja, das Laufwerk ist nach der Zuordnung verbunden. Der lokale Administrator hat keine Rechte für die Netzwerkfreigabe, weshalb ich sie als anderen Benutzer zuordnen muss, bevor Robocopy ausgeführt wird.
Craig W

Antworten:


17

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.


Nicht möglich. Der Computer befindet sich nicht in der Domäne, daher muss ich die Aufgabe als Nicht-Domänenbenutzer ausführen, aber nur Domänenbenutzer haben Zugriff auf die Netzwerkfreigabe.
Craig W

Ich weiß, dass dies sehr spät für das Spiel ist, aber haben Sie versucht, Ihre Arbeit in zwei geplante Aufgaben zu unterteilen, eine für die Netzwerkfreigabe mit Domänenanmeldeinformationen und eine weitere, die als lokaler Administrator mit Zugriff auf das zugeordnete Laufwerk ausgeführt wird? Sie müssten sie nur versetzen oder einen Datei-Mutex oder etwas anderes verwenden, um sicherzustellen, dass sie in Ordnung sind.
Dan Csharpster

7

In meinem Fall musste ich nur das Häkchen entfernen, run with highest privilegesaber die Aufgabe wird auf demselben Benutzer ausgeführt wie der Benutzer, der das Laufwerk zugeordnet hat.


Das war es für mich. Macht Sinn.
Tom Haws


1

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.


1

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.


1
echo Get-Date >> c:\mount_nfs_log.txt
net use X: \\share\folder password /user:domain\user>> c:\mount_nfs_log.txt 2>&1

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.


Dies hat das Problem für mich behoben! Mit diesem Befehl können Sie sich mit Authentifizierung anmelden, bevor das Skript Wunder vollbracht hat! Dies behebt das Problem, Benutzerkonten mit etwas Robustem "spiegeln" zu müssen.
Tschallacka

1
Zum ersten Mal habe ich jemandem beim Stapelüberlauf geholfen, froh, dass ich helfen konnte. Verwenden Sie auch "echo Get-Date" anstelle von dem, was ich vorher hatte.
Ryan McGrath

Ich habe die Protokollierung nicht benötigt, also habe ich cmd /c net usevor 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!
Tschallacka

Sie pflegen die UNC-Pfade mit diesem Skript weiterhin, damit Sie es wissen. Nur weil Sie einem UNC-Pfad einen Laufwerksbuchstaben zuweisen und dann auf diesen Laufwerksbuchstaben verweisen, müssen Sie die \\ServerName\ShareNamein dieser Art von Logik beibehalten . Darüber hinaus muss dies nicht unbedingt PowerShell sein, da NET USEdie 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.
Pimp Juice IT

Beachten Sie außerdem, 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.
Pimp Juice IT

0

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.


0

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.


Willkommen bei Super User! Bitte lesen Sie die Frage noch einmal sorgfältig durch. Ihre Antwort beantwortet nicht die ursprüngliche Frage. OP erwähnt nicht die Verwendung von Cygwin oder Bash.
DavidPostill

0

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.


0

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


0

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


-2

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.


Dies beantwortet nicht die Frage des Autors. Bitte hinterlassen Sie keine Kommentare als Antworten.
Ramhound

Bitte geben Sie als Antwort nicht "Danke" an. Wenn Sie etwas Zeit in die Website investieren, erhalten Sie ausreichende Berechtigungen , um die von Ihnen gewünschten Antworten zu verbessern.
DavidPostill
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.