PowerShell生成AD用户权限审查CSV:可变表头格式调整需求
AD用户权限报表格式调整与审查实践
一、PowerShell脚本调整:将CSV转换为期望的列格式
原脚本导出的是每行对应一条用户-组记录,要转换为以samaccountname为列头的格式,可以使用以下脚本处理已导出的UserPermissions.csv:
# 读取CSV数据 $usersData = Import-Csv -Path C:\PS_Results\UserPermissions.csv # 按SAM分组,整理每个用户的信息条目(SAM作为列名,内容包括姓名、职位、所有组) $userGroups = $usersData | Group-Object -Property SAM | ForEach-Object { $user = $_.Group[0] # 构建条目数组:列名(SAM)、姓名、职位、所属组列表 $entries = @($_.Name, $user.Name, $user.Title) + $_.Group.Group [PSCustomObject]@{ ColumnName = $_.Name Entries = $entries } } # 确定需要输出的最大行数(所有用户中条目最多的数量) $maxRows = ($userGroups.Entries | Measure-Object -Property Length -Maximum).Maximum # 逐行输出每列对应的内容,对齐格式 for ($i = 0; $i -lt $maxRows; $i++) { $rowContent = $userGroups | ForEach-Object { # 如果当前用户的条目数不足,补空字符串 $entry = if ($i -lt $_.Entries.Count) { $_.Entries[$i] } else { "" } # 按固定宽度对齐,这里设为20,可根据实际调整 $entry.PadRight(20) } $rowContent -join "" } # 可选:将结果保存到文件 # for ($i = 0; $i -lt $maxRows; $i++) { # $rowContent = $userGroups | ForEach-Object { # $entry = if ($i -lt $_.Entries.Count) { $_.Entries[$i] } else { "" } # $entry.PadRight(20) # } # $rowContent -join "" | Out-File -Path C:\PS_Results\UserPermissions_Formatted.txt -Append # }
脚本说明:
- 读取原CSV数据,按
SAM字段分组,提取每个用户的姓名、职位和所有所属组 - 计算所有用户中最长的条目长度,确保输出时每行覆盖所有用户的内容
- 逐行循环,将每个用户对应位置的内容对齐后输出,不足位置补空
二、AD用户权限审查实践思路
- 建立定期审查机制:根据企业规模和安全需求,设定季度/半年度常规审查,用户调岗、离职或敏感权限变更时,立即开展专项审查
- 坚持权限最小化原则:核查用户权限是否仅为完成当前岗位工作所需,移除冗余的组隶属关系或直接权限,避免过度授权
- 优先通过组分配权限:尽量使用AD安全组而非直接给用户赋权,组权限便于批量管理,降低审查复杂度
- 重点核查高风险权限:针对域管理员、服务器本地管理员、敏感文件共享权限、数据库访问权限等高风险权限,逐一确认授权合规性
- 自动化减少手动工作量:利用PowerShell、AD管理中心(ADAC)批量导出权限数据,减少人工统计的误差和耗时
- 留存审查记录:每次审查的结果、权限变更原因及审批人信息存档,满足审计要求,便于追溯权限变更历史
- 及时清理离职/闲置账号:离职用户立即禁用AD账号并移除所有权限,长期闲置(如90天未登录)的账号也要核查或禁用
内容的提问来源于stack exchange,提问作者CrowbarTM
相关产品推荐
相关产品推荐

