Windows

如何從任務計劃程序正確執行包含 BITS 操作的 Powershell 腳本?

  • March 8, 2018

我正在嘗試根據配置自動備份一些文件和文件夾。這是使用 Powershell 5 完成的,而 Powershell 5 又依賴於後台智能傳輸服務 (BITS)。例如:

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

Powershell 腳本使用 bat 執行:

powershell -ExecutionPolicy unrestricted .\Main.ps1

批處理使用計劃任務執行:

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

當我使用計劃任務上設置的相同帳戶直接執行批處理時,它執行完美。當我從任務調度程序執行它時,BITS 操作發出以下錯誤:

由於使用者尚未登錄到網路,因此未執行所請求的操作。指定的服務不存在。(來自 HRESULT 的異常:0x800704DD)

我嘗試更改 BITS 服務的使用者,將其設置為我用於計劃任務的同一服務帳戶,但該服務不再啟動:

由於以下錯誤,後台智能傳輸服務服務無法啟動:
為此服務指定的帳戶與為在同一程序中執行的其他服務指定的帳戶不同。

回到計劃任務,我已更改為“僅在使用者登錄時”執行。當然,這只有在我為此使用者設置自動登錄時才有意義(否則,如果未登錄,它將不會執行)。

**問題:**如何在不依賴自動登錄等技巧的情況下使用 BITS 自動備份?

看起來您只有在登錄時才能執行該腳本。來自此處的 MS 文件“使用 Windows Powershell 創建 BITS 傳輸作業” 。

從在非互動式上下文(例如 Windows 服務)中執行的程序中使用 *-BitsTransfer cmdlet 時,您可能無法將文件添加到 BITS 作業,這可能會導致掛起狀態。要使作業繼續進行,必須登錄用於創建傳輸作業的身份。例如,在作為任務計劃程序作業執行的 PowerShell 腳本中創建 BITS 作業時,除非啟用了任務計劃程序的任務設置“僅在使用者登錄時執行”,否則 BITS 傳輸將永遠不會完成。

嘗試改用robocopy

引用自:https://serverfault.com/questions/900689