如何用托管代码(无P/Invoke)获取本地计算机所有用户组
获取Windows本地用户组的实用方案
我完全懂你的痛点——搜遍Stack Overflow大多都是Active Directory相关的方案,本地计算机的示例少得可怜。刚好我之前也碰到过这个需求,就是要获取「计算机管理」→「系统工具>本地用户和组>组」里的那些本地组,下面给你几个靠谱的实现方法:
1. 命令行(CMD)快速查看
直接用系统自带的命令就能搞定,打开命令提示符执行以下命令,立刻就能列出所有本地用户组,还附带组描述和成员信息:
net localgroup
如果需要把结果保存下来,加个重定向就行:
net localgroup > C:\local_groups_list.txt
2. PowerShell脚本化获取
如果要做自动化或者更灵活的处理,PowerShell是更好的选择:
适用于Windows 10/Server 2016及以上版本
用原生的Get-LocalGroup cmdlet,简洁高效:
# 列出所有本地组的完整信息 Get-LocalGroup # 只提取组名 Get-LocalGroup | Select-Object -ExpandProperty Name # 导出组名和描述到CSV文件 Get-LocalGroup | Select-Object Name, Description | Export-Csv -Path "C:\local_groups.csv" -NoTypeInformation
适用于老版本Windows(Win7/Server 2012等)
老系统没有Get-LocalGroup的话,用WMI查询也能实现:
Get-WmiObject -Class Win32_Group -Filter "LocalAccount='True'" | Select-Object Name, Description
3. C#/.NET程序中获取
如果要在自己的应用里集成这个功能,可以用System.DirectoryServices.AccountManagement命名空间:
using System; using System.DirectoryServices.AccountManagement; class LocalGroupFetcher { static void Main() { // 创建本地计算机的上下文 using (var machineContext = new PrincipalContext(ContextType.Machine)) { // 构建组查询对象 using (var groupQuery = new GroupPrincipal(machineContext)) { using (var searcher = new PrincipalSearcher(groupQuery)) { // 遍历所有查询到的本地组 foreach (var searchResult in searcher.FindAll()) { if (searchResult is GroupPrincipal localGroup) { Console.WriteLine($"组名: {localGroup.Name}"); Console.WriteLine($"描述: {localGroup.Description ?? "无描述"}"); Console.WriteLine("---"); } } } } } } }
内容的提问来源于stack exchange,提问作者Alvaromon
相关产品推荐
相关产品推荐

