使用 Bits-Transfer 的 PowerShell 脚本无法作为计划任务运行

使用 Bits-Transfer 的 PowerShell 脚本无法作为计划任务运行

我尝试过使用其他问答,例如Windows Server 2008 R2 PowerShell 脚本手动运行,但不作为计划任务运行但无济于事。

基本上我有一个 PoSh 脚本(显然这是现在流行的缩写),它可以复制大量大文件,一次一个,从一个服务器(UNC 路径)到本地驱动器。它会循环执行此操作,并使用BITS 传输。 大致:

  1. Start-BitsTransfer源/目标/异步/低优先级
  2. whileBits 作业的状态仍为“正在连接”或“正在传输”,Sleep2 秒(即等待其完成)
  3. 一旦我们走出这个循环,Complete-BitsTransfer
  4. Write-Host“已完成文件 X” 消息
  5. 获取下一个文件,重复...(所以是的,有一个外循环通过从 获得的文件列表Get-ChildItem

剧本作品从 PoSh ISE 和常规 PoSh 控制台运行时。

我尝试使用SleepStart-Sleep甚至[Threading.Thread]::Sleep,以为这就是问题所在。然后我将 包装.ps1在 中,当从 CMD 运行时,它也能正常工作。但在所有情况下,无论是直接调用 还是包装器.bat,计划任务都会失败。.ps1.bat

它成功了,但实际发生的情况是它启动了所有的传输作业,它们进入“暂停”状态(Get-BitsTransfer在 PoSh 窗口中显示),并且任务认为一切正常并完成,留下这些孤立的 BITS 作业,我甚至无法Complete-BitsTransfer继续,因为它们也会引发错误。

其他行为:

  • 上述就是当我以域管理员帐户身份运行它并让它存储带有任务的密码时发生的情况。
  • 如果我将其更改为服务帐户(即盒子上的管理员),它实际上永远不开始BITS 作业。它还会抛出错误“用户必须具有‘以批处理作业身份登录’权限”。
  • 如果我尝试让它作为本地/内置帐户运行,它也无法启动 BITS 作业。

我的头发都快被扯掉了……救命!

答案1

据 MS 称,计划任务必须在交互式登录下运行。

https://msdn.microsoft.com/en-us/library/windows/desktop/ee663885(v=vs.85).aspx

相关内容