需求:获取旧服务器共享中ACL与父项不同的文件/文件夹列表
PowerShell脚本:检测ACL权限与父项存在差异的文件/文件夹
核心逻辑:默认启用权限继承的对象,其ACL权限完全继承自父项;只有手动添加的非继承权限项会导致该对象与父项权限存在差异。以下脚本会递归遍历目标目录,筛选出所有带有显式权限项的文件和文件夹,并输出相关信息。
脚本代码
param( [Parameter(Mandatory=$true)] [string]$TargetPath ) # 递归遍历目标路径下所有文件与文件夹(包含隐藏/系统对象) Get-ChildItem -Path $TargetPath -Recurse -Force | ForEach-Object { $currentAcl = Get-Acl -Path $_.FullName # 筛选出非继承的权限条目(即手动添加的权限) $explicitAccessRules = $currentAcl.Access | Where-Object { -not $_.IsInherited } if ($explicitAccessRules) { # 构造结构化输出对象 [PSCustomObject]@{ 对象路径 = $_.FullName 对象类型 = if ($_.PSIsContainer) { "文件夹" } else { "文件" } 显式权限 = $explicitAccessRules | Select-Object IdentityReference, FileSystemRights, AccessControlType } } }
使用方法
- 将上述代码保存为
Check-ACL-Diff.ps1 - 以管理员身份打开PowerShell,切换到脚本所在目录
- 运行脚本并指定目标共享目录:
.\Check-ACL-Diff.ps1 -TargetPath "\\OldServer\SharedFolder"
关键说明
-Force参数确保遍历包含隐藏、系统属性的文件/文件夹- 仅输出带有显式权限的对象:这类对象的ACL与父项存在差异,因为它们添加了不继承自父级的权限规则
- 输出的
显式权限列会列出所有手动添加的用户/组、对应的权限类型(允许/拒绝)及具体权限内容
内容的提问来源于stack exchange,提问作者Eros Rodigari
相关产品推荐
相关产品推荐

