批量导出Windows用户权限报告需分三步:1.导出本地用户及组成员关系;2.用icacls导出关键路径NTFS ACL;3.检查高危特权(如SeTakeOwnershipPrivilege),最后整合为统一CSV报告。
要批量导出 windows 系统用户权限报告,核心是分层采集三类关键信息:本地用户及组成员关系、关键路径的文件系统访问控制(acl)、以及高危特权(serights)。powershell 是最直接、无需第三方工具的方案,且所有操作均可在标准 windows 环境中完成。
导出本地用户列表及所属组
这是权限分析的起点,反映“谁属于哪个组”,尤其关注 Administrators、Backup Operators 等敏感组:
- 以管理员身份打开 PowerShell,运行:
Get-LocalUser | Select-Object Name, Enabled, LastLogon | Export-Csv "C:users_basic.csv" -NoTypeInformation -Encoding UTF8 - 批量检查每个用户是否在管理员组中:
Get-LocalUser | ForEach-Object { $u = $_.Name; [PSCustomObject]@{ User = $u; IsAdmin = (Get-LocalGroupMember -Group "Administrators" -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*$u"}) -ne $null } } | Export-Csv "C:dmin_membership.csv" -NoTypeInformation -Encoding UTF8 - 如需导出所有本地组的完整成员列表,可用:
Get-LocalGroup | ForEach-Object { $g = $_.Name; Get-LocalGroupMember -Group $g -ErrorAction SilentlyContinue | Select-Object @{n='Group';e={$g}}, Name, ObjectClass } | Export-Csv "C:ll_groups_members.csv" -NoTypeInformation -Encoding UTF8
导出关键路径的文件系统权限(最实用)
绝大多数实际访问问题由 NTFS 权限决定。icacls 是 Windows 原生命令,配合 PowerShell 可结构化整理结果:
- 导出 C:Users 下所有用户配置文件夹的 ACL(含子目录):
icacls "C:Users*" /t /c /q 2>&1 | Out-File "C:users_acl_raw.txt" - 将原始文本转为更易读的 CSV 格式(需简单清洗):
(Get-Content "C:users_acl_raw.txt" | Select-String -Pattern "^C:\|:$") -replace ":s*$","" | ConvertFrom-Csv -Delimiter ":" -Header "Path","ACL" | Export-Csv "C:users_acl_clean.csv" -NoTypeInformation -Encoding UTF8 - 对程序目录或共享文件夹做同样处理,例如:
icacls "C:Program Files" "D:Shared" /t /c /q 2>&1 | Out-File "C:critical_paths_acl.txt"
检查高危特权(如“取得所有权”“调试程序”)
这些权限不体现在文件属性里,而是嵌入用户令牌中,需通过安全策略或 WMI 查询:
- 获取当前机器上所有启用的本地特权(需管理员权限):
secedit /export /cfg "C:secpol.inf" /quiet; Get-Content "C:secpol.inf" | Select-String "Se.*Privilege" | ForEach-Object { $_.ToString().Split("=")[0].Trim() } | Sort-Object | Out-File "C:enabled_privileges.txt" - 检查指定用户(如 John)是否被显式授予 SeTakeOwnershipPrivilege:
$sid = (Get-LocalUser -Name "John").SID.Value; auditpol /get /user:$sid 2>&1 | Select-String "SeTakeOwnershipPrivilege"(注意:auditpol 对本地用户支持有限,此方式适用于域环境;本地场景建议聚焦组成员+ACL,更可靠) - 日常审计中,优先确认管理员组成员名单,再结合其对敏感路径(如 C:WindowsSystem32、注册表 HKLMSOFTWARE)的实际 ACL,比逐个查特权更高效、更贴近真实风险面
整合生成一份可读报告
把上述结果汇总成统一视图,便于快速定位风险点:
- 新建汇总脚本,读取各 CSV 文件并合并:
$users = Import-Csv "C:users_basic.csv"; $admins = Import-Csv "C:dmin_membership.csv"; $acl = Import-Csv "C:users_acl_clean.csv"; $report = $users | Join-Object -Right $admins -LeftJoinProperty Name -RightJoinProperty User -Property @("Name", "Enabled", "LastLogon", "IsAdmin"); $report | Export-Csv "C:inal_user_permissions_report.csv" -NoTypeInformation -Encoding UTF8 - 若未安装 Join-Object 模块,可用原生方式:
$report = foreach ($u in $users) { $a = $admins | Where-Object User -eq $u.Name; [PSCustomObject]@{ Name = $u.Name; Enabled = $u.Enabled; LastLogon = $u.LastLogon; IsAdmin = if ($a) { $a.IsAdmin } else { $false } } } - 最终报告至少包含:用户名、是否启用、最后登录时间、是否为管理员、关键路径是否有写权限(可人工从 ACL 文件中补充判断)

















