使用C#的BITS(后台智能传输服务)

时间:2015-06-24 17:49:48

标签: c# powershell microsoft-bits

我想编写一些代码,使用BITS在同一台服务器上的磁盘之间复制非常大的文件(第二块磁盘是SAN级克隆\快照)。

我调查了BITS,因为我认为这是一个很好的方法来获得进度\传输百分比完整数据,以及恢复功能等

我有很多托管的Powershell,我认为我已经准备好使用内置的BITS cmdlet,因为这将是一种超级快速的方式,我可以写包装来获取我需要的东西等等。我碰到了这个:

  

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

通过模拟的Powershell运行空间执行任何操作会引发以下错误:

  

由于用户尚未登录网络,因此未执行请求的操作。指定的服务不存在。 (HRESULT异常:0x800704DD)“

我的网络服务是以AppPoolIdentity运行的,我冒充我们需要做的事情。有意义的是,这不能通过托管的Powershell工作,但任何人都可以想到一个解决方法吗?如果这是不可能的,我还有其他选择吗?

我在考虑使用BITS Compact Server作为替代方案,但文档很古老。

1 个答案:

答案 0 :(得分:1)

你有没有想过使用robocopy?使用/ ZB开关运行对我来说一直很好用,你可以使用/ J来提高性能,从而实现无缓冲的I / O.对于输出,也可以使用/ ETA和/ TEE运行。