通过Powershell将AD组添加到大型公用驱动器



我们有一个大的文件共享,其中包含大约1tb的数据。以下位置下面有大约600个文件夹。F: \Data
任务是为数据文件夹中的每个文件夹分配特定的AD组读取权限,子文件夹无关紧要。

我想看看下面的脚本是否是最好的方法?我担心的是这是一个文件服务器,我不想破坏任何东西或者搞砸了任何权限,也不确定脚本运行时是一个打开的文件会导致一个错误。

我试过在测试环境中运行这个脚本,效果很好,但没有错误日志,即使它停在了我可以检查的地方。

我可能想得太多了,但只是想看看是否有人经历过这样的事情?

$StartingPath = "PATH"
$Right = "Read"
$Principal = "DomainADGroup"
$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule($Principal,$Right,"Allow")
foreach ($Folder in $(Get-ChildItem -Directory $StartingPath -Recurse)) {
$Acl=Get-Acl $Folder.FullName
$Acl.SetAccessRule($Rule)
Set-Acl $folder.Fullname $Acl
}

您需要尝试继承和传播(使用您的测试环境(,并使用带有5个参数的重载方法来创建新的访问规则。

这样,您只需将新规则添加到主数据共享文件夹,而不必迭代所有子文件夹。

# FileSystemRights:  https://learn.microsoft.com/en-us/dotnet/api/system.security.accesscontrol.filesystemrights
# Inheritance flags: https://learn.microsoft.com/en-us/dotnet/api/system.security.accesscontrol.inheritanceflags
# Propagation flags: https://learn.microsoft.com/en-us/dotnet/api/system.security.accesscontrol.propagationflags
$Principal  = "TheADGroupWithReadPermissions"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($Principal, "Read", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl = Get-Acl "F:Data"
$acl.SetAccessRule($accessRule)
Set-Acl -Path "F:Data" -ACLObject $acl

AddAccessRule()SetAccessRule()的区别:

AddAccessRule设置访问规则
此方法将向ACL添加此访问规则。如果某个用户或组具有"修改"权限,并且我们使用AddAccessRule((创建具有"读取"权限的新规则,则该用户或组仍将具有修改权限此方法将删除任何现有的访问权限,将该访问权限替换为指定的规则。如果某个用户或组具有"修改"权限,并且使用指定"读取"权限的SetAccessRule((创建了新规则,则该用户或组现在将仅具有"读取"许可权

最新更新