如何使用PowerShell批量修改2500个文件夹的ACL高级权限
Windows 文件夹批量高级权限配置PowerShell脚本方案
前置准备
- 三个CSV文件格式统一,第一列表头为
Path,每行存储对应安全组需要配置的文件夹绝对路径,示例CSV结构:
Path E:\Share\Folder1 E:\Share\Folder2
- 运行PowerShell的账号需具备目标文件夹的更改权限或所有者权限,建议使用文件服务器本地管理员/域管理员账号执行
- 提前替换脚本内的域名、组名、CSV路径、模板文件夹路径为你实际环境的参数
步骤1:提取基准权限模板
你已经手动配置好符合要求的文件夹,直接提取该文件夹下对应安全组的权限规则作为模板,避免手动拼权限参数出错:
# 替换为你已经配置好的模板文件夹路径 $templatePath = "E:\Share\Dati\COMUNE\AreaPaghe\001A0093 - ABN SRL" $templateAcl = Get-Acl -Path $templatePath # 替换为你的实际域/主机名、对应安全组名,提取目标权限规则 $zonaParmaRule = $templateAcl.Access | Where-Object {$_.IdentityReference.Value -eq "你的域名\zona parma"} $group2Rule = $templateAcl.Access | Where-Object {$_.IdentityReference.Value -eq "你的域名\group2"} $group3Rule = $templateAcl.Access | Where-Object {$_.IdentityReference.Value -eq "你的域名\group3"}
步骤2:批量权限配置脚本
# 定义批量处理函数 function Set-FolderSpecialPermission { param( [string]$CsvPath, [System.Security.AccessControl.FileSystemAccessRule]$TargetRule, [string]$TargetGroupName ) # 读取CSV内的所有文件夹路径 $folderList = Import-Csv -Path $CsvPath -Encoding UTF8 foreach ($folder in $folderList) { $path = $folder.Path.Trim() # 跳过不存在的路径 if (-not (Test-Path -Path $path -PathType Container)) { Write-Warning "路径不存在:$path" continue } # 获取当前文件夹ACL $acl = Get-Acl -Path $path # 关闭权限继承,同时将继承权限转换为显式权限(满足需求1) $acl.SetAccessRuleProtection($true, $true) # 删除所有非目标安全组的权限 foreach ($rule in $acl.Access) { if ($rule.IdentityReference.Value -ne $TargetGroupName) { $acl.RemoveAccessRule($rule) | Out-Null } } # 添加目标特殊权限规则 $acl.AddAccessRule($TargetRule) # 应用ACL到文件夹 Set-Acl -Path $path -AclObject $acl Write-Host "已完成权限配置:$path" } } # 批量处理三个安全组对应的文件夹,替换为你实际的CSV路径和组名 Set-FolderSpecialPermission -CsvPath "C:\config\zona_parma_paths.csv" -TargetRule $zonaParmaRule -TargetGroupName "你的域名\zona parma" Set-FolderSpecialPermission -CsvPath "C:\config\group2_paths.csv" -TargetRule $group2Rule -TargetGroupName "你的域名\group2" Set-FolderSpecialPermission -CsvPath "C:\config\group3_paths.csv" -TargetRule $group3Rule -TargetGroupName "你的域名\group3"
注意事项
- 正式批量执行前,先单独拿2-3个测试文件夹验证权限配置结果,确认符合预期后再全量执行
- 如果你的CSV文件编码为GBK,将
Import-Csv的-Encoding UTF8参数改为-Encoding Default - 若需要将权限应用到文件夹下的子文件/子文件夹,可修改提取到的权限规则的
InheritanceFlags和PropagationFlags属性,和你手动配置的模板保持一致即可
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

