Я пишу сценарий PowerShell, который должен иметь возможность загружать много больших файлов со многих серверов (то есть хостов Windows Server) одновременно. Многие из этих серверов могут использоваться для важных действий, и поэтому важно, чтобы метод передачи имел возможность переходить в фоновый режим, когда нагрузка на серверы начинает становиться высокой.

Вот 3 метода передачи, которые я знаю, и причины, почему я не думаю, что они достаточно хороши для работы.

BitsTransfer: первым, что пришло на ум, был BitsTransfer (https://docs.microsoft.com/en-us/powershell/module/bitstransfer/start-bitstransfer?view=win10-ps), однако существует фатальная проблема при таком подходе он не может передавать файлы, которые используются для записи другими процессами, и многие файлы, которые необходимо загрузить с серверов, будут в таком состоянии. Смотрите start-bitstransfer: процесс не может получить доступ к файлу, потому что он используется другим процессом для этой проблемы ...

Copy-Item: Это не дает контроля над его приоритетом, и поэтому существует вероятность того, что большая передача файлов может привести к остановке сервера во время обработки важной нагрузки.

Robocopy: Опять же, я не вижу упоминания о приоритетах или фоновой обработке.

1 ответ1

0

Вы должны обратить внимание на многопоточность, параллельную обработку, фоновые задания, задания пространства выполнения и задания потоков для вашего варианта использования.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .