如何从任务计划程序正确运行包含 BITS 操作的 Powershell 脚本?

如何从任务计划程序正确运行包含 BITS 操作的 Powershell 脚本?

我正在尝试根据配置自动备份某些文件和文件夹。这是使用 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 自动执行备份而不依赖自动登录等技巧?

答案1

看起来您只能在登录后运行该脚本。从 MS 文档“使用 Windows Powershell 创建 BITS 传输作业”中发现这里

当您在非交互式上下文中运行的进程(如 Windows 服务)中使用 *-BitsTransfer cmdlet 时,可能无法将文件添加到 BITS 作业,这可能会导致挂起状态。要继续执行作业,必须登录用于创建传输作业的身份。例如,在作为任务计划程序作业执行的 PowerShell 脚本中创建 BITS 作业时,除非启用任务计划程序的任务设置“仅在用户登录时运行”,否则 BITS 传输将永远无法完成。

尝试使用机器人复制反而。

相关内容