如何用Powershell获取域内各PC的用户权限列表?本地/AD方案咨询
解决方案:域内PC用户权限清单生成
一、单PC本地生成权限列表
1. 命令行工具
- 基础组查询:在CMD或PowerShell里执行
net localgroup,直接列出所有本地组及对应成员。要导出到文件的话,用net localgroup > C:\LocalGroups_$(hostname).txt,文件名自动带上当前PC名称。 - 结构化输出:用PowerShell的
Get-LocalGroupMembercmdlet生成更易整理的格式:
导出的CSV可以直接用Excel打开,方便筛选查看。Get-LocalGroup | ForEach-Object { Get-LocalGroupMember $_.Name | Select-Object GroupName, Name, PrincipalSource } | Export-Csv -Path C:\UserPermissions_$(hostname).csv -NoTypeInformation
2. 图形化操作
右键「此电脑」→「管理」,展开「本地用户和组→组」,每个组右键「属性」就能看到成员,适合手动快速查看单台机器的权限配置。
二、AD服务器集中查询(理想方案)
1. 可复用PowerShell脚本(新手友好)
不需要复杂编码,用AD模块结合远程查询即可,步骤如下:
# 导入AD模块(需在AD服务器或安装了RSAT工具的机器上运行) Import-Module ActiveDirectory # 获取域内所有计算机(可加过滤条件,比如只查特定OU下的机器:-SearchBase "OU=Sales,DC=domain,DC=com") $computers = Get-ADComputer -Filter * -Properties Name # 循环查询每台机器的本地组和成员 $results = foreach ($computer in $computers) { try { # 远程查询需确保目标PC开启WinRM,且执行账号有目标PC的管理员权限 Get-WmiObject -Class Win32_GroupUser -ComputerName $computer.Name -ErrorAction Stop | ForEach-Object { [PSCustomObject]@{ ComputerName = $computer.Name GroupName = $_.GroupComponent.Split('=')[1].Replace('"','') UserName = $_.PartComponent.Split('=')[1].Replace('"','') } } } catch { Write-Warning "无法连接到 $($computer.Name): $_" } } # 导出所有结果到CSV $results | Export-Csv -Path C:\DomainUserPermissions.csv -NoTypeInformation
注意:提前用组策略批量开启域内PC的WinRM(或在单台机器上执行Enable-PSRemoting -Force),确保执行脚本的账号有域内所有PC的管理员权限。
2. 现成管理工具
- AD内置工具:在「Active Directory Users and Computers」中,可结合组策略查看已部署的权限模板;用「ADAC(Active Directory Administrative Center)」的高级查询功能,筛选跨设备的用户权限关联。
- 第三方审计工具:比如Lepide Auditor for Active Directory,这类工具能自动扫描域内所有PC的本地权限,生成可视化报表,完全不需要自己写代码,适合新手快速整理权限清单。
三、关于现成方案与编码难度
- 现成方案:上述PowerShell脚本是可直接复用的现成方案,第三方AD审计工具也是成熟的商用/免费解决方案,无需从零开发。
- 编码难度:用现成的PowerShell cmdlet实现需求,只需要修改少量参数(比如过滤特定计算机),完全在新手能力范围内——不需要专业编程知识,只要能复制脚本、理解基本参数含义即可。如果要自定义筛选逻辑(比如按用户统计跨设备权限),稍微学习下PowerShell的循环和过滤语法就能实现,门槛很低。
内容的提问来源于stack exchange,提问作者Pierre de la Verre
相关产品推荐
相关产品推荐

