如何在Powershell中从多个主机复制多个文件?

时间:2019-04-01 15:54:15

标签: powershell

我正在尝试制作一个Powershell脚本(5.1),该脚本将从多个主机复制多个文件和文件夹,这些主机经常更改,因此,如果可以使用可以在需要时追加的列表,那将是理想的选择。

我使用xcopy都能正常工作,所以我知道这些位置存在。我想确保如果在我不在工作时进行了更改,则有人可以在文本文件中添加或删除主机,并且备份将继续工作。

我拥有的代码应该遍历我的主机列表中的每个主机,并从文件路径列表中复制所有文件,然后再移至下一个主机。

但是出现两个错误:

  

术语'\ REMOTEHOST \ c $ \ Users \ Public \ desktop \ back-up \ $ Computers'不被识别为cmdlet,函数,脚本的名称   文件或可运行的程序。检查名称的拼写,或者是否包含路径,请验证路径是否正确,然后重试。   在第8行:char:17

和:

  

copy-item:找不到路径'\ HOST \ C $ \ LK \ Appdata \ Cmmcfg C $ \ LKAppData \ Errc C $ \ LK \ Appdata \ TCOMP C $ \ LK \ Probes C $ \ LK \ Appdata \ CAMIO C $ \ LK \ Appdata \ LaunchPad C $ \ LK \ Appdata \ Wincmes   C $ \ barlen.dta C $ \ Caliprogs C $ \ Cali',因为它不存在。

这似乎并没有按照我的预期阅读列表,我也注意到它从中读取的主机在列表中排名第六,而不是第一。

REM*This file contains the list of hosts you want to copy files from*
    $computers = Get-Content 'Y:\***FILEPATH***\HOSTFILE.txt'

REM*This is the file/folder(s) you want to copy from the hosts in the $computer variable*
    $source = Get-Content 'Y:\***FILEPATH***\FilePaths.txt'

REM*The destination location you want the file/folder(s) to be copied to*
    $destination = \\**REMOTEHOST**\c$\Users\Public\desktop\back-up\$Computers

    foreach ($item in $computers) {

    }  

    foreach ($item in $source) {

    }

    copy-item \\$computer\$source -Destination $destination -Verbose

2 个答案:

答案 0 :(得分:0)

您的目标变量需要用引号引起来。要让它评估其中的其他变量,请将其用双引号引起来。否则,PowerShell会认为这是您要运行的命令。

$destination = "\\**REMOTEHOST**\c$\Users\Public\desktop\back-up\$Computers"

答案 1 :(得分:0)

破解了,谢谢您的帮助。我搞砸了foreach命令!我两个变量都设置为Item,所以我很困惑!

foreach($计算机中的$ itemhost){  $ destination =“ \ Remotehost \ c $ \ Users \ xoliver.jeffries \ desktop \ back-up \ $ itemhost”  foreach($ source中的$ item)  {copy-item“ \ $ itemhost \ $ item *”-目的$ destination-详细-recurse}  }

这不是最整洁的输出,但这只是一个障碍!该代码现在使我能够使用主机列表和列表文件,并将它们复制到远程服务器!

相关问题