Board logo

标题: [其他] 批处理如何实现共享目录只同步权限? [打印本页]

作者: juan1923    时间: 2022-5-2 15:59     标题: 批处理如何实现共享目录只同步权限?

现在有两台服务器的共享目录\\server1\abc, \\server2\abc这2个共享目录是要求实时同步,

我已经用vbs 调用bat 脚本 后台运行,实现了实时镜像同步,而且将共享目录的权限也拷贝过去了。
  1. robocopy  "\\server1\abc"  "\\server2\abc"   /R:3 /W:3 /MON:1 /MOT:1 /COPYALL /MIR
复制代码
问题来了,利用 copyall的参数虽然把共享目录权限带过去了,但是也把server1的本地目录权限也复制到server2了,并且把server2的本地权限冲击了,完全变server1的权限了。导致server2本地的账号无法访问.

所以我现在脚本改成
  1. robocopy  "\\server1\abc"  "\\server2\abc"   /R:3 /W:3 /MON:1 /MOT:1 /e
复制代码
只实时同步了文件,不同步权限。
尝试了permcopy 复制权限,这是2003的工具,我拿到2016使用一直提示network报错,
现在像各路高手请教下
1. 在同步文件的同时只同步共享目录权限不覆盖本地的权限
或者是 2.我运行我上面说的脚本,有没有方法另外同步共享目录权限而不影响本地服务器权限
作者: flashercs    时间: 2022-5-2 17:40

本帖最后由 flashercs 于 2022-5-2 17:51 编辑
  1. <#*,:&cls
  2. @echo off
  3. cd /d "%~dp0"
  4. powershell -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~f0\" -ReadCount 0 | Out-String)))"
  5. pause
  6. exit /b
  7. #>
  8. # NOTE:merge ACLs
  9. $srcdir = "\\server1\abc"
  10. $dstdir = "\\server2\abc"
  11. $srcacl = Get-Acl -LiteralPath $srcdir
  12. $dstacl = Get-Acl -LiteralPath $dstdir
  13. foreach ($rule in $srcacl.Access) {
  14.   $dstacl.AddAccessRule($rule)
  15. }
  16. Set-Acl -LiteralPath $dstdir -AclObject $dstacl
  17. robocopy $srcdir $dstdir /R:3 /W:3 /MON:1 /MOT:1 /E
复制代码
MergeACLs.bat




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2