在同一个小型网络上将文件从一台机器复制到多台其他机器

在同一个小型网络上将文件从一台机器复制到多台其他机器

我想让通常需要手动完成的复印工作实现自动化。我从未使用过脚本,而且网络知识也很少,所以答案可能比我想象的要简单,但到目前为止我还没有成功。

细节

我在一个房间里有几台 Windows 10 电脑,它们都插在同一个路由器上。我从未对它们之间的正式工作组或连接进行任何设置。它们都有一个本地管理员帐户,名称相同,密码为空。

我有一个文件夹和文件树,我想将它们从 USB 驱动器复制到一台计算机,然后,我不需要携带 USB 驱动器到每台计算机进行手动复制,而是希望该计算机将其(使用此建议的脚本)分发到房间中的其他计算机。

我尝试过的方法

在花了大约二十分钟研究了一些初步想法之后,我决定尝试 robocopy。特别是,我对 /mir 选项很感兴趣,它可以将目标镜像到源,删除不再有效的文件夹和文件。由于我每天都需要执行此任务,并且每次都使用相同的文件夹结构,因此我对删除源中不再存在的文件很感兴趣。

将数据从 USB 驱动器复制到 machine-1 后,我的第一个命令如下所示:

robocopy E:\Folder1\Folder2 \\machine-2\E:\Folder1\Folder2 /mir /log:"robocopy.log"

然后我收到一个错误,告诉我 robocopy 不接受空白密码。进一步研究后我发现,这是 Windows 的一个远程问题,通常远程访问其他机器时,Windows 上不能使用空白密码。

虽然我明白为所有机器设置密码是更安全的选择,但我们最初决定将机器上的密码留空,因为它们被放在只有我们有钥匙的房间里,如果我们不必每次(每天几次)都输入密码,我们访问它们会容易得多。这 100% 是为了方便。因此,虽然我们当然愿意在必要时为所有机器添加密码,那就太好了如果我们现在可以将它们省略掉,情况会怎样?考虑到这一点,我设法找到了这篇较早的帖子,它向用户展示了如何禁用 Windows 设置,该设置将本地帐户使用空白密码限制为仅登录:http://dandar3.blogspot.com/2008/04/windows-vista-allow-remote-desktop.html

在两台测试机器上禁用该设置后,我再次尝试运行相同的命令。这一次,我得到了两个不同的错误(按此顺序):

ERROR 5 (0x00000005) Getting File System Type of Destination \\machine-2\E:\Folder1\Folder2
Access is denied.

ERROR 5 (0x00000005) Creating Destination Directory \\machine-2\E:\Folder1\Folder2
Access is denied.

所以我觉得这听起来像是权限问题。我尝试在目标计算机(在此示例中为 machine-2)上调整 Folder1 的权限,在我没有得到不同的结果后,我只是给了 Windows 组 Everyone 对整个文件夹的完全控制权。但即使这样也没有改变错误。

之后,我发现另一个论坛帖子建议共享该文件夹。因此,我右键单击目标计算机的 E 盘,并选择共享 - > 高级共享 - > 高级共享,然后选择共享该文件夹,将其命名为 E。结果看起来(在我这个外行看来)我已经正确设置了它: 参见屏幕剪辑

因此,我按照论坛帖子中的建议,在命令中将其更改E:为:E$

robocopy E:\Folder1\Folder2 \\machine-2\E$\Folder1\Folder2 /mir /log:"robocopy.log"

但很遗憾,还是没什么效果。

最后,我在 Stack Overflow 上看到了一个关于使用 robocopy 在两个不同域的机器之间进行复制的回答,使用命令即可net use。我想在批量处理之前先单独测试一下这一行,因此我输入了:

net use \\machine-2\e$ /user:machine-1\myusername "" 

此命令还返回System error 5 has occurred. Access is denied.

但此时机器 2 上的 E 盘仍处于共享状态,并且仍将完全控制权授予所有人。这也让我很困惑。

我已经到了这样的地步,我确信我对网络设置和 robocopy 的缺乏了解可能会导致我找到潜在的解决方案,这些解决方案要么比需要的更复杂,要么像胶带一样拼凑在一起。我不仅想找到“正确”的答案,还想理解它。

有没有更好的方法来自动化我试图自动化的任务?如果 robocopy 是最好的方法,那么上述问题的罪魁祸首在哪里?这是我需要进行网络设置的东西,还是我没有正确使用命令本身?或者我只是需要一组更好的关键字/搜索词来自己找到更清晰的答案?

非常感谢您的帮助或指导!

答案1

老实说,如果您无法添加密码(并设置自动登录),那么最好的选择可能是第三方应用程序,例如适用于 Windows 的 Syncthing 或 rsync(cygwin 或 Deltacopy)。Windows 通常不愿意在没有密码的情况下授予管理共享访问权限。公共文件夹也应默认在非公共网络上共享,或者您可以在网络和共享中心启用它。它应该允许无密码连接。

答案2

计算机被存放在只有您才能访问的房间中。如果任何人可以访问房间外的网络插孔或无线网络,那么他们就可以完全访问这些计算机。

话虽如此,如果您真的想将这些机器视为一次性机器并保留空白的管理员密码,那应该是可能的。我建议在每台机器上创建一个“IT”或类似的帐户,然后使用该帐户对您的脚本进行身份验证。如果所有机器上都存在匹配的帐户,则它们应该能够通过管理共享或其他方式访问其他机器。

我将插入我的 Powershell 插件以将文件复制到其他机器。

$computers = "Machine-1","Machine-2","Machine-3"

# Push the array of computers into the loop to process each one
$computers | ForEach-Object {
    # If the folder doesn't exist...
    If (!Test-Path "\\$_\E$\Folder1\Folder2") {
        # ...create it
        New-Item "\\$_\E$\Folder1\Folder2" -ItemType Directory
    }

    # Copy to other computer recursively (sub-folders) and forceing overwrite
    Copy-Item "E:\Folder1\Folder2\" "\\$_\E$\Folder1\Folder2" -Recurse -Force
}

相关内容