今天学习了下怎么用.Net操作本地用户和组,因为目前网上还没看到一篇比较完整的文章,所以整理了下也分享出来,最后附带参考文档,方便深究的童鞋继续学习。
==========  原创作品    作者:Yokeqi    出处:博客园  ==========

这里两个思路,一个是利用WindowsApi进行操作,另一个则是用.net封装好的DirectoryEntry类。

这里只为快速实现,不求技术高深,所以采用DirectoryEntry是最好的,也容易理解和上手。最后附带相关的文章链接,方面要深究的童鞋慢慢研究。

一、知识点简单介绍

1. 初始化DirectoryEntry类,传入域节点,以本机为例:string PATH_LOCAL_MACHINE = "WinNT://" + Environment.MachineName;

DirectoryEntry dir = new DirectoryEntry(PATH_LOCAL_MACHINE)

2. DirectoryEntry类拥有Children属性,可以通过Children属性获取本机所有用户、组、和服务等对象,并且这里类似于树形结构,父子节点的类型都是DirectoryEntry,理解这一点后面用起来就简单很多。

using (DirectoryEntry dir = new DirectoryEntry(_machinePath))
{
foreach (DirectoryEntry chd in dir.Children)
{
}
}

3. 通过向DirectoryEntry类的Children属性Add或Remove对象,实现添加和删除功能。

using (DirectoryEntry dir = new DirectoryEntry(_machinePath))
{
//增加用户
using (DirectoryEntry user = dir.Children.Add(name, "User"))
{
} // 删除用户
dir.Children.Remove(name);
}

4. 对DirectoryEntry类的每次修改最后要调用CommitChanges()方法才能提交生效,有点EF的感觉。

5. 最难的一点是设置各类属性,使用到了Invoke方法和Properties属性,那Properties属性还好,通过调试可以知道都有哪些属性,但是可不是什么都可以通过Properties属性来进行设置,而Invoke可就头疼了,要自己传入方法名,但是有哪些方法可以供调用,找了下也没有个全面的参考手册,这里目前我也还一知半解,最后参考文档中列出一份,有想法的童鞋可以学习。

二、具体实例演示如何使用DirectoryEntry类来添加、修改、删除、查询用户和组。

1. 添加用户

/// <summary>
/// 新增用户
/// </summary>
/// <param name="name">用户名</param>
/// <param name="password">密码</param>
/// <param name="groupName">组</param>
/// <param name="description">描述</param>
public void AddUser(string name, string password, string groupName, string description)
{
using (DirectoryEntry dir = new DirectoryEntry(_machinePath))
{
using (DirectoryEntry user = dir.Children.Add(name, "User")) //增加用户名
{
user.Properties["FullName"].Add(name); //用户全称
user.Invoke("SetPassword", password); //用户密码
user.Invoke("Put", "Description", description);//用户详细描述
//user.Invoke("Put","PasswordExpired",1); //用户下次登录需更改密码
user.Invoke("Put", "UserFlags", ); //密码永不过期
//user.Invoke("Put", "UserFlags", 0x0040);//用户不能更改密码s
user.CommitChanges();//保存用户
using (DirectoryEntry grp = dir.Children.Find(groupName, "group"))
{
if (grp.Name != "")
{
grp.Invoke("Add", user.Path.ToString());//将用户添加到某组
}
}
}
}
} /// <summary>
/// 添加windows用户组
/// </summary>
/// <param name="groupName">组名称</param>
/// <param name="description">描述</param>
public void AddGroup(string groupName, string description)
{
using (DirectoryEntry dir = new DirectoryEntry(_machinePath))
{
using (DirectoryEntry group = dir.Children.Add(groupName, "group"))
{
group.Invoke("Put", new object[] { "Description", description });
group.CommitChanges();
}
}
}

2. 查询并修改用户信息

using (DirectoryEntry dir = new DirectoryEntry(PATH_LOCAL_MACHINE))
{
var user = dir.Children.Find(name);
user.Invoke("FullName", "全名");// 修改全名
user.Invoke("AccountDisabled", true);// 是否启用
user.Invoke("SetPassword", new object[] { "" });// 修改密码
user.Invoke("Put", "UserFlags", ); //密码永不过期
//user.Invoke("Put","PasswordExpired",1); //用户下次登录需更改密码
//user.Invoke("Put", "UserFlags", 0x0040);//用户不能更改密码
user.Invoke("Put", "Description", "这是描述");//用户详细描述
user.Rename(newName);// 重命名 user.CommitChanges();// 更改后提交才能生效
}

3. 删除用户

/// <summary>
/// 用户重命名
/// </summary>
/// <param name="oldName"></param>
/// <param name="newName"></param>
public void RenameUser(string oldName, string newName)
{
using (var user = FindUserOrGroup(oldName))
{
user.Rename(newName);
}
}

三、参考文档

C# 操作本地用户和组(基本全功能)的更多相关文章

  1. 解决Win10家庭版没有‘本地用户和组’问题

    今天偶然发现我的win10系统是家庭版,并且没有本地用户和组. 处理方法:将系统升至为win10专业版,然后下载microKMS_v17.02.14做的激活.参考网站 1.打开运行窗口,输入 gped ...

  2. 管理Windows Server 2008本地用户和组

    下面介绍Windows Server 2008本地用户和组的管理包括创建用户.删除用户.重设密码.将用户添加到组.普通用户跟管理员的区别 .用户配置文件包括桌面上文件,桌面背景,桌面上图标,IE设置, ...

  3. Linux权限操作(用户和组)

    useradd 添加用户useradd -u uid user 创建指定uid的用户-o 配合-u 不检查uid的唯一性-d 指定家目录-s 指定shell-r 创建系统用户-m 强制创建家目录-M ...

  4. windows本地用户及组的区别

    Administrators(超级管理员组) 用来管理注册用户或者具有一定权限的其他管理员,维护网站的运行. Administrators中的用户对计算机/域有不受限制的完全访问权,分配给该组的默认权 ...

  5. windows server 2012 本地用户和组

  6. (转)AIX 用户和组管理

    AIX 用户和组管理 原文:https://www.ibm.com/developerworks/cn/aix/library/au-aixuseradmin/ 管理 IBM AIX 中的用户和组是管 ...

  7. Windows中的用户和组以及用户密码处理

    目录 用户帐户 Windows 默认账户 Windows 内置用户账户 查看.创建和删除账户 组账户 内置组账户 组的查看.创建和删除 Windows中对用户密码的处理 LM-hash NTLM-ha ...

  8. 用户与安全 -(1)Linux用户及组管理

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登 ...

  9. Linux用户和组的管理操作

    用户和组的管理操作 命令中涉及的单词和简写: 用户:user:组:group : 增加:add :  修改:modify  mod ;  删除 : delete  del 增加用户     /etc/ ...

随机推荐

  1. cobalt strike和metasploit结合使用(互相传递shell会话

    攻击机 192.168.5.173 装有msf和cs 受害机 192.168.5.179 win7 0x01 msf 派生 shell 给 Cobalt strike Msfvenom生成木马上线: ...

  2. oracle弱口令攻击

    oracle弱口令攻击   0x00 oracle数据库简介 oracle数据库是现在很流行的数据库系统,很多大型网站都采用Oracle,它之所以倍受用户喜爱是因为它有以下突出的特点: 一.支持大数据 ...

  3. shark恒破解笔记1-壳内寻找注册码

    记录学习shark恒大教程的学习记录 壳内寻找注册码 OD打开 明显有壳 F9先运行程序 2.Ctrl+G输入401000到解码段,如果出现db ** 说明已经解码过,脱离了程序本身的壳 鼠标右键-& ...

  4. Python之random模块和time模块

    1.random()模块的使用   import random x = random.random() y = random.random() print(x,y*10) #random.random ...

  5. freertos学习

    freertos的基本框架如下 注意有三点很重要: 1.任务的资源 (1)任务优先级:freertos 能够调度的任务优先级在freertosConfig.h中的configMAX_PRIORITIE ...

  6. .NET Framework概述

    1.NET Framework是为其运行的应用程序提供各种服务的托管执行环境,它包括两个主要组件:(1).公共语言运行时 (CLR),(2)..NET Framework 类库: 2.NET Fram ...

  7. SQL注入学习(一)

    SQL注入(SQL Injection)是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击. SQL注入基础 漏洞原理 针对SQL注入的攻击行为可描述 ...

  8. Linux下终端字体颜色设置方法

    颜色=\033[代码;前景;背景m 如:\033[1;32;40m表示高亮显示字体为绿色,背景色为黑色 颜色=\[\033[代码;前景;背景m\] echo -e "this is a \0 ...

  9. Java新特性 5、6、7、8、9、10、11、12、13

    文章转载于:https://www.cnblogs.com/hepengju/p/11595102.html 项目地址:https://github.com/hepengju/java-new-fea ...

  10. PHP 类中使用全局变量和全局常量

    <?php $global_var = "var"; define('global_const', 'const'); class Test { public $_var; ...