我正在尝试制作一个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
答案 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} }
这不是最整洁的输出,但这只是一个障碍!该代码现在使我能够使用主机列表和列表文件,并将它们复制到远程服务器!