PowerShell - 低优先级远程文件传输

PowerShell - 低优先级远程文件传输

我正在编写一个 PowerShell 脚本,该脚本需要能够同时从许多服务器(即 Windows 服务器主机)下载许多大文件。许多服务器可能用于重要活动,因此当服务器负载开始升高时,传输方法能够淡入后台非常重要。

以下是我所知道的 3 种传输方法以及我认为它们不适合这项工作的原因。

比特传输:首先想到的是 BitsTransfer(https://docs.microsoft.com/en-us/powershell/module/bitstransfer/start-bitstransfer?view=win10-ps),但这种方法有一个致命的问题,即它无法传输正在被其他进程写入的文件,而许多需要从服务器下载的文件将处于这种状态。请参阅start-bitstransfer :该进程无法访问该文件,因为它正在被另一个进程使用对于这个问题……

复制项目:这无法控制其优先级,因此在处理重要负载时,大文件传输可能会导致服务器陷入停顿。

Robocopy:同样,我没有看到任何关于优先级或后台处理的提及。

答案1

您应该根据您的用例考虑多线程、并行处理、后台作业、运行空间作业和线程作业。

https://randombrainworks.com/2018/01/28/powershell-background-jobs-runspace-jobs-thread-jobs

您的代码应该首先检查文件是否正在使用中,如果是,则跳过该文件并将其放入集合中,然后您将使用集合返回并重试。

然而,您似乎还要求根据服务器资源消耗状态进行动态限制,这也意味着您在采取任何行动之前需要单独的代码来检查资源状态,恕我直言,排队与您所能获得的差不多。

https://dille.name/blog/2015/09/08/processing-a-queue-using-parallel-powershell-jobs-with-throttling

相关内容