有没有办法将目录的权限克隆到文件,然后在另一台服务器上运行该文件以在重新创建的结构上重新创建这些权限。
我有一个创建目录的脚本:
New-Item -Path D:\superuser-data -ItemType directory
Net-Item -Path D:\superuser-data\documents -ItemType directory
Net-Item -Path D:\superuser-data\scripts -ItemType directory
我运行该脚本,然后使用服务器 A 上的 AD 帐户按我想要的方式设置权限。
然后,我希望能够在服务器 B 上重新运行该脚本,然后在服务器 B 上运行另一个脚本,将权限设置为与我在服务器 A 上执行的操作相匹配。
答案1
从这里:https://seankilleen.com/2015/01/how-to-copy-ACL-Permissions-To-Folders-With-Powershell/
Powershell 包含命令get-acl
和set-acl
,您可以通过管道将它们连接在一起:
Get-Acl -Path C:\Folder1 | Set-Acl -Path C:\Folder2
这些路径可以是 UNC 或其他适当的路径方法,因此它们应该能够跨网络工作。
更新:
安全描述符可以被复制和存储。以下不是最有效的过程,这是我第一次尝试这样做,但它是可行的。
经过几次反复的谷歌搜索,我找到了以下信息:http://community.idera.com/powershell/powertips/b/tips/posts/replacing-ntfs-permissions-with-sddl-information
流程如下。
- 捕获来自源计算机的 ACL:
$SDout = get-acl -path (source folder)
- 店铺剪贴板中的 SDDL:
$SDout.GetSecurityDescriptorSddlForm('All') | clip.exe
- 粘贴放入记事本并移至目标计算机。
- 复制仅将单行 SDDL 发送到剪贴板。
- 店铺源 SDDL 中的参数:
$SDsource = '(paste the source SDDL here)'
- 捕获参数中的目标 ACL 对象:
$SDtarget = get-acl -path (target folder)
- 覆盖目标的 SDDL 与源的 SDDL:
$SDtarget.SetSecurityDescriptorSddlForm($SDsource)
- 写将修改后的 ACL 返回到目标文件夹:
set-acl -Path (target folder) -ACLObject $SDtarget
现在检查属性您应该看到目标文件夹具有与源文件夹相同的权限。