从1台服务器到另一台服务器的PowerShell RoboCopy特定文件

时间:2017-01-19 23:44:54

标签: powershell robocopy

考虑一个场景:

  1. 服务器A有一个File_Folder,其中有100K +文件,有些文件可能超大
  2. 我有一个.csv文件,每个用户(有一套完整的文件列表要从服务器A File_Folder复制)到服务器B(每个用户都有一个目录)
  3. 我的逻辑是 1)逐个读取每个用户的每个CSV文件 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 Path就像Y:\ UserA,Y:\ UserB等......

    任何建议都可能有所帮助。

    我没有记录并且没有显示任何输出;它提高了速度 但仍然复制“2.57 MB”文件共花了大约9分钟,这在现实生活中并不好。

2 个答案:

答案 0 :(得分:1)

假设<?php $im = new imagick('file.pdf[0]'); $im->setImageFormat('jpg'); header('Content-Type: image/jpeg'); echo $im; ?> 是一个仅过滤到要复制的文件的数组,更改$RS_Report_Name以复制所有文件而不是逐个复制应该会产生很大的影响。

robocopy

如果仍然超过最大命令长度,则将数组拆分为较小的组,例如10-50,并在每个组中运行robocopy $SourcePath $path $RS_Report_Name

答案 1 :(得分:0)

感谢Matthew Wetmore建议在目标服务器上运行PowerShell脚本,并感谢Travis建议划分arraylist

$ Report_array2 = $ Report_array [$ Initial_Counter .. $ Counter]

Robocopy“$ SourcePath”“$ path”$ Report_array2 / MT / Z | out-Null

我还使用/ MT进行多线程处理和/ Z(重启模式)性能从几分钟增加到几秒