我遇到了一个 IT 问题,需要一些帮助。我在一家拥有许多用户的大型组织工作(超过 1000 名用户)。我们目前处于混合的 Server 2012 R2/2008/Windows 7 环境中。情况如下:
领导层要求,我部门支持的计算机上的重要文档应备份到为每个用户配置的网络驱动器上。这主要涉及文档、关键的 Word 和 Excel 文件、AutoCAD 文件等。
由于服务器空间有限以及组织规模有限,我们目前不使用重定向文件或将所有用户数据备份到中央位置。几年前,我们的想法是让网络驱动器像 Dropbox 文件夹一样运行,用户可以根据自己认为最重要的内容自行监督上传的内容。然而,领导层担心这种情况没有发生,许多人根本不使用驱动器,因此才有了这项规定。然而,许多用户仍然没有遵守规定。
有人要求我找到一种方法来确定哪些用户正在正确备份,哪些用户没有备份,只要有可能。虽然我主要使用 Windows,但我对这类事情的类 Unix 脚本的了解要比对 PowerShell 或 VBS 的了解多得多。我曾提议实施一个基于 rsync 的解决方案,如 cwrsync,仅根据一组详细规则强制同步,但领导层更感兴趣的只是找出谁没有遵守,这样他们就可以让用户自己做。他们担心的是,一旦我们打开闸门,制定广泛的备份策略,服务器可能会迅速超载,即使我们试图通过规则限制备份文件的大小。
因此,我们的想法是找到一个脚本或程序,它可以比较计算机上的文件和每个用户的共享,并告诉我们其中一个或另一个缺少什么。我发现了一些非常基本的 PowerShell 命令可以做到这一点,但只针对文件名——因此不包括大小、日期和类型等信息。处理所有这些数据也很有挑战性,所以找到一个能给我提供强大输出并让我可以轻松整理的东西会很好。
关于我应该去哪里查看,您有什么想法吗?
答案1
这比较对象PowerShell 中的命令是一个很好的起点。
像这样:
$ref = Get-ChildItem C:\users\user\folder
$dif = Get-ChildItem \\Share\Folder
Compare-Object -referenceobject $ref -differenceobject $dif
应该会给你这样的输出:
InputObject SideIndicator
----------- -------------
TEST3.txt =>
TEST1.txt <=
这表明差异对象位置(远程共享)有 TEST3.txt,但参考对象(本地文件夹)没有,并且参考对象位置有 TEST1.txt,但差异对象位置没有。
在此测试中,两个位置都有一个名为 TEST2.txt 的文件,但它没有显示在结果中。
答案2
CMD 命令 FC 可以通过两种方式执行此操作:
1)FC _usersFilePath_\* _shareFilepath_\* > compare.txt
这将比较文件并将结果输出到 txt 文件
2)批处理文件:(将执行与上述相同的操作,但不检查文件的内容)
cd _usersFilePath_
tree /d > usersFiles.txt
cd _shareFilePath_
tree /d > shareFiles.txt
fc usersFiles.txt shareFiles.txt > compare.txt