如何在Windows及PowerShell中查询文件/文件夹的用户或组访问权限
嘿,我来帮你搞定这两个Windows权限查询的问题,尤其是你用PowerShell时遇到的只显示所有者的小困扰~
1. 图形界面方式查询Windows文件/文件夹的访问权限
如果你偏好可视化操作,用系统自带的属性面板就能轻松查看:
- 右键目标文件或文件夹,选择属性
- 切换到安全标签页,这里会直接列出所有拥有该资源访问权限的用户和组,以及对应的基础权限类别
- 要是想查看更细分的权限(比如读取、写入、修改等具体权限,或者权限的继承关系),点击高级按钮,在弹出的高级安全设置窗口里,能看到每个用户/组的完整权限条目,还能检查有效权限、修改权限设置
2. 使用PowerShell查询文件/文件夹的用户或组访问权限
你之前的代码只显示所有者,是因为你只指定了PSPath和Owner这两个属性——Get-Acl返回的对象里,所有用户/组的权限规则都存在Access属性里,得解析这个集合才能拿到完整权限信息。
针对你批量查询.txt文件的需求,给你这个完整的脚本:
$Files = "D:\Akki\data\*.txt" Get-Acl $Files | ForEach-Object { $currentAcl = $_ # 遍历每个文件的所有权限条目 $currentAcl.Access | ForEach-Object { # 整理成易读的自定义对象 [PSCustomObject]@{ 文件路径 = $currentAcl.PSPath -replace 'Microsoft.PowerShell.Core\\FileSystem::', '' 文件所有者 = $currentAcl.Owner 用户/组 = $_.IdentityReference.Value 权限类型 = $_.FileSystemRights 访问控制 = $_.AccessControlType # 显示「允许」或「拒绝」 是否继承 = $_.IsInherited } } } | Format-Table -AutoSize
代码说明:
Get-Acl会获取指定路径下所有.txt文件的访问控制列表(ACL)- 遍历每个ACL的
Access集合,这个集合里的每一项就是一个用户/组的权限规则 - 把关键字段整理成自定义对象,去掉了PowerShell默认的冗长路径前缀,让输出更直观
- 最后用
Format-Table -AutoSize自动调整列宽,让内容更易读
快速排查的简化写法:
如果你只是想快速查看单个文件的权限条目,不用整理格式,可以直接用:
Get-Acl "D:\Akki\data\example.txt" | Select-Object -ExpandProperty Access
导出成CSV方便分析:
如果需要把权限报告保存下来,只要把最后面的Format-Table -AutoSize换成:
Export-Csv -Path "D:\文件权限报告.csv" -NoTypeInformation -Encoding UTF8
内容的提问来源于stack exchange,提问作者Niranajan Padyal




