Wie führe ich Powershell-Skripte, die BITS-Operationen enthalten, ordnungsgemäß aus dem Taskplaner aus?

Wie führe ich Powershell-Skripte, die BITS-Operationen enthalten, ordnungsgemäß aus dem Taskplaner aus?

Ich versuche, basierend auf einer Konfiguration ein automatisches Backup einiger Dateien und Ordner durchzuführen. Dies geschieht mit Powershell 5, das wiederum auf dem Background Intelligent Transfer Service (BITS) basiert. Beispiel:

Start-BitsTransfer $Source\* $Destination -RetryInterval 60 -RetryTimeout 600

Powershell-Skripte werden mithilfe eines Bat ausgeführt:

powershell -ExecutionPolicy unrestricted .\Main.ps1

Der Stapel wird mithilfe einer geplanten Aufgabe ausgeführt:

User account: AD service account
Run: whether user is logged on or not

Wenn ich den Batch direkt mit demselben Konto ausführe, das für die geplante Aufgabe festgelegt wurde, läuft er einwandfrei. Wenn ich ihn über die Aufgabenplanung ausführe, wird bei BITS-Vorgängen der folgende Fehler ausgegeben:

Der angeforderte Vorgang wurde nicht ausgeführt, da sich der Benutzer nicht beim Netzwerk angemeldet hat. Der angegebene Dienst existiert nicht. (Ausnahme von HRESULT: 0x800704DD)

Ich habe versucht, den Benutzer für den BITS-Dienst zu ändern, indem ich ihn auf dasselbe Dienstkonto eingestellt habe, das ich für die geplante Aufgabe verwende, aber der Dienst startet nicht mehr:

Der Dienst „Background Intelligent Transfer Service“ konnte aufgrund des folgenden Fehlers nicht gestartet werden:
Das für diesen Dienst angegebene Konto unterscheidet sich von dem Konto, das für andere Dienste angegeben wurde, die im selben Prozess ausgeführt werden.

Zurück zur geplanten Aufgabe: Ich habe sie so geändert, dass sie „nur ausgeführt wird, wenn der Benutzer angemeldet ist“. Das wäre natürlich nur sinnvoll, wenn ich für diesen Benutzer die automatische Anmeldung einstelle (sonst wird sie nicht ausgeführt, wenn er nicht angemeldet ist).

Frage:Wie kann ich eine Sicherung mit BITS automatisieren, ohne auf Tricks wie die automatische Anmeldung angewiesen zu sein?

Antwort1

Es sieht so aus, als ob Sie dieses Skript nur ausführen können, wenn Sie angemeldet sind. Aus der MS-Dokumentation "Verwenden von Windows Powershell zum Erstellen von BITS-Übertragungsaufträgen"Hier.

Wenn Sie *-BitsTransfer-Cmdlets innerhalb eines Prozesses verwenden, der in einem nicht interaktiven Kontext ausgeführt wird, z. B. einem Windows-Dienst, können Sie möglicherweise keine Dateien zu BITS-Aufträgen hinzufügen, was zu einem angehaltenen Zustand führen kann. Damit der Auftrag fortgesetzt werden kann, muss die Identität, die zum Erstellen eines Übertragungsauftrags verwendet wurde, angemeldet sein. Wenn Sie beispielsweise einen BITS-Auftrag in einem PowerShell-Skript erstellen, das als Taskplaner-Auftrag ausgeführt wurde, wird die BITS-Übertragung nie abgeschlossen, es sei denn, die Aufgabeneinstellung „Nur ausführen, wenn Benutzer angemeldet ist“ des Taskplaners ist aktiviert.

Versuchen Sie es mitRobokopiestattdessen.

verwandte Informationen