用于将文件复制到 50 多台远程计算机的 Robocopy 命令

Posted

技术标签:

【中文标题】用于将文件复制到 50 多台远程计算机的 Robocopy 命令【英文标题】:Robocopy commands to copy a file to over 50 remote machines 【发布时间】:2015-01-04 12:22:46 【问题描述】:

我昨天开始研究 robocopy,试图将文件从一个目标复制并覆盖到多台远程计算机。我试过Robocopy to copy files to a remote machine,但它不起作用。我得到与链接中的人相同的错误。有没有人有任何建议或以正确的方式引导我?非常感谢!

【问题讨论】:

如果您只复制一个文件,您可以使用 PowerShell Copy-Item C:\local\folder\file.txt \\Server\C$\Path,因为它支持 UNC 路径 是否可以将一个文件放到我在 RemoteNames.txt 中的多台远程计算机上?感谢您花时间回答马特 【参考方案1】:

您可以为此使用 PowerShell。它有一个效率低下的问题,它会一次复制一个,但这对于 50 台机器来说不应该是一个问题。如果您制作了 PowerShell 脚本,这可能会有所帮助

$computers = Get-Content "C:\filewithcomputers.txt"
$fileToCopy = "C:\filetocopy.txt"
ForEach($computer in $Computers)
    Copy-Item -Path $fileToCopy -Destination "\\$computer\C`$\Temp"

假设该文件包含一个计算机列表,每台计算机都在自己的行中,则将文件$fileToCopy 复制到文件C:\filewithcomputers.txt 中的每个服务器。该文件将被复制到每台机器上的临时文件夹中。根据您的方案所需更新路径。我只建议这样做,因为您标记了powershell-remoting。如果您不熟悉 PowerShell,也许其他人可以为您提供更多您正在寻找的更好的答案。对一个文件使用 RoboCopy 似乎很乏味。

如果您想检查一个文件夹是否存在并且是否可以访问,您可以执行以下操作。

$computers = Get-Content "C:\filewithcomputers.txt"
$fileToCopy = "C:\filetocopy.txt"
ForEach($computer in $Computers)
    $destinationx86 = "\\$computer\C`$\Program Files (x86)"
    $destination = "\\$computer\C`$\Program Files"
    If(Test-Path $destinationx86)
        # Copy this to Program Files (x86)
        Copy-Item -Path $fileToCopy -Destination $destinationx86     
     Else 
        # Copy this to Program Files
        Copy-Item -Path $fileToCopy -Destination $destination
    


【讨论】:

【参考方案2】:

如果您需要使用不同的凭据进行连接,您可以使用

$credential = Get-Credential    
New-PSDrive -Name "Computer01" -PSProvider FileSystem -Root "\\Computer01\Share" -Credential $credential -Scope global

现在您可以复制到例如计算机01:\文件夹01\

【讨论】:

【参考方案3】:

如果您已将环境设置为支持 PSRemoting 并将文件放在文件共享中,则可以使用 PowerShell Remoting 指示多台计算机通过 Invoke-Command 几乎同时检索文件。您可以使用 -ThrottleLimit 来限制同时操作的数量,具体取决于源文件的大小以及网络/服务器的稳健程度:

$computers = Get-Content "C:\filewithcomputers.txt"
$originalsource = "\\fileserver\shared\payload.exe"
$originaldestination = "c:\"
$scriptblockcontent = 
    param($source,$destination)
    Copy-Item -Path $source -Destination $destination
    
Invoke-Command –ComputerName $Computers –ScriptBlock $scriptblockcontent `
   –ThrottleLimit 50 -ArgumentList $originalsource,$originaldestination

【讨论】:

以上是关于用于将文件复制到 50 多台远程计算机的 Robocopy 命令的主要内容,如果未能解决你的问题,请参考以下文章

利用ssh-copy-id复制公钥到多台服务器

Copy-Item 用于使用凭据将文件从本地复制到远程服务器

如何将文件和文件夹树复制到远程计算机?

如何将文件从远程服务器复制到本地计算机? [关闭]

如何远程复制另一台Linux服务器

powershell 使用 Copy_Item cmdlet 将文件复制到远程计算机问题