2017-01-19 19 views
1

Рассмотрим сценарий:PowerShell RoboCopy определенные файлы с 1 сервера на другой сервер

  1. Сервер имеет один File_Folder где есть 100K + файлы и некоторые файлы могут быть супер огромный
  2. У меня есть .csv Файл для каждого пользователя (который имеет полный набор файлов списка, который будет скопирован с сервера A File_Folder) на сервер B (где есть директория для этого каждый пользователь)

Моя логика 1) Прочитайте каждый CSV файлов для каждого пользователя 1 на 1 2) поместите список для RoboCopy для копирования файлов с сервера A на сервер B в каждую папку пользователя 3) он работает для меня, но он очень медленный. Я хочу сделать это быстрее.

Примечание: обязательно использовать PowerShell

Мой код выглядеть следующим образом

$Get_CSV_File_INFO = @(Get-Content $Full_CSV_Path) 
$SourcePath = "z:\" 

foreach($a in $Get_CSV_File_INFO) 
    { 

    if($a -match '.zip') 
    { 
    $RS_Report_Name.add($a) |Out-Null 
    } 
} 

$RS_Report_Name | % { Robocopy $SourcePath $path $_} | Out-Null 

Destionation путь как Y: \ ПользовательА, Y: \ UserB и т.д .....

Любое предложение может помочь.

Я не регистрирую и не показываю выход; он улучшил скорость , но все же копирование всего файлов «2.57 МБ» заняло около 9 минут, что не очень хорошо в реальном жизненном сценарии.

+0

вы используете это на сервере A, S erver B или полностью отдельную коробку? Основываясь на вашем '$ sourcePath', являющемся« z: \ », я предполагаю, что оба сервера A и B удалены от того, где вы запускаете скрипт. Если это так, вы копируете контент с сервера A на B через локальную машину. Это два последовательных сетевых перелета. Изменение шаблона для вызова копии непосредственно с A на B должно быть значительно быстрее. Особенно, если ваш скриптовый компьютер работает медленнее, чем A-> B. –

+0

Хорошая идея запускать на целевом сервере вместо хоста, чтобы сделать вещи быстрее. этот отзыв действительно хорош – TahirAyoub

+0

Это решило вашу проблему? Я могу опубликовать его в качестве ответа. Если мне нужно запустить на третьей машине, я обычно буду вызывать команду на сервер A, а затем в блок сценария: сопоставьте диск с сервером B с явными учетными данными, скопируйте с A на B. –

ответ

1

Предполагая, что $RS_Report_Name - это массив, отфильтрованный только для файлов, которые вы хотите скопировать, изменив robocopy, чтобы скопировать все файлы, а не один за другим, должно иметь большое влияние.

robocopy $SourcePath $path $RS_Report_Name 

Если это все еще превышает максимальную длину команды, разделить массив на более мелкие группы говорят 10-50 и запустить Robocopy на каждом.

+0

вы хорошо это понимаете, но получаете эту ошибку. Программа «Robocopy.exe» не запускалась: имя файла или расширение слишком длинное – TahirAyoub

+0

как я упомянул $ RS_Report_Name будет иметь большой список file Names – TahirAyoub

+0

Также из 100K плюс файлов мне нужно всего лишь скопировать несколько 100 файлов не все из них – TahirAyoub

0

Спасибо Мэтью Wetmore за предложение, чтобы запустить PowerShell скрипт на сервере назначения и Спасибо Travis для Предложения разделить Список_массивов

$ Report_array2 = $ Report_array [$ Initial_Counter .. $ Счетчик]

Robocopy " $ SourcePath» "$ путь" $ Report_array2/MT/Z | из-Null

Также я использую/MT для многопоточной и/Z (Restart Mode) производительность увеличилась от нескольких минут до нескольких секунд