如何用PowerShell获取文件夹及子文件夹ACL权限并显示路径、用户组
嘿,没问题!我来帮你搞定这个PowerShell权限查询的需求😉
PowerShell获取文件夹权限及组成员方案
完全可以用PowerShell实现你要的功能——不仅能获取文件夹(含子文件夹)的路径、用户/组权限,还能展开组关联的用户。而且不需要你手动逐个处理文件夹,PowerShell的递归遍历功能会帮你自动搞定所有子文件夹。
完整脚本示例(适合新手)
下面是一个经过优化的脚本,注释很详细,你只需要修改开头的根文件夹路径就能用:
# -------------------------- 配置区 -------------------------- # 替换成你要查询的根文件夹路径 $rootFolder = "C:\Your\Target\Folder" # 可选:如果要导出结果到CSV,取消下面一行的注释并设置路径 # $outputCsvPath = "C:\Temp\FolderPermissionsReport.csv" # ----------------------------------------------------------- # 递归获取所有文件夹(包括子文件夹),逐个处理 Get-ChildItem -Path $rootFolder -Directory -Recurse | ForEach-Object { # 保存当前文件夹的完整路径(解决你之前没显示路径的问题) $currentFolder = $_.FullName # 获取该文件夹的访问控制列表(ACL) $folderAcl = Get-Acl -Path $currentFolder # 遍历每个权限条目 foreach ($accessRule in $folderAcl.Access) { $identityName = $accessRule.IdentityReference.Value $isGroup = $false $groupMembers = @() # 判断当前权限主体是组还是用户,组的话获取成员 try { # 先尝试查询Active Directory组(需要AD模块) $adGroup = Get-ADGroup -Identity $identityName -ErrorAction Stop $isGroup = $true # 递归获取组内所有成员(包括嵌套组) $groupMembers = Get-ADGroupMember -Identity $adGroup -Recursive | Select-Object -ExpandProperty Name } catch { # AD组查询失败,尝试查询本地组 try { $localGroup = Get-LocalGroup -Name $identityName -ErrorAction Stop $isGroup = $true $groupMembers = Get-LocalGroupMember -Group $localGroup | Select-Object -ExpandProperty Name } catch { # 既不是AD组也不是本地组,判定为单独用户 $isGroup = $false } } # 整理输出结果为结构化对象 [PSCustomObject]@{ FolderPath = $currentFolder Identity = $identityName IsGroup = $isGroup GroupMembers = if ($isGroup) { $groupMembers -join ", " } else { "N/A" } AccessRights = $accessRule.FileSystemRights AccessType = $accessRule.AccessControlType # 允许/拒绝 } } } | Format-Table -AutoSize # 直接在控制台显示结果 # 如果要导出到CSV,替换上面一行为:| Export-Csv -Path $outputCsvPath -NoTypeInformation -Encoding UTF8
关键细节解释
为什么之前没显示文件夹路径?
你之前的脚本应该没把Get-ChildItem返回的文件夹对象的FullName属性带进去,上面的脚本里$currentFolder = $_.FullName就是专门用来捕获当前处理的文件夹完整路径的。是否需要逐个处理文件夹?
不需要你手动逐个操作!Get-ChildItem -Recurse会自动遍历根文件夹下的所有子文件夹,然后ForEach-Object会替你逐个处理每个文件夹的权限,整个过程是自动化的。组成员的兼容性处理
脚本同时支持AD组和本地组:先尝试查询AD组(需要RSAT AD模块,管理员权限下可以用Install-WindowsFeature RSAT-AD-PowerShell安装),如果失败再尝试本地组,确保在不同环境都能正常工作。
注意事项
- 运行脚本需要管理员权限,否则可能无法读取某些系统文件夹的权限。
- 如果是查询远程文件夹,确保你有足够的权限访问目标路径。
- 如果权限条目很多,建议导出到CSV文件查看,比控制台输出更清晰。
内容的提问来源于stack exchange,提问作者ArcticWFox
相关产品推荐
相关产品推荐

