C# 操作本地用户和组(基本全功能)
今天学习了下怎么用.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# 操作本地用户和组(基本全功能)的更多相关文章
- 解决Win10家庭版没有‘本地用户和组’问题
今天偶然发现我的win10系统是家庭版,并且没有本地用户和组. 处理方法:将系统升至为win10专业版,然后下载microKMS_v17.02.14做的激活.参考网站 1.打开运行窗口,输入 gped ...
- 管理Windows Server 2008本地用户和组
下面介绍Windows Server 2008本地用户和组的管理包括创建用户.删除用户.重设密码.将用户添加到组.普通用户跟管理员的区别 .用户配置文件包括桌面上文件,桌面背景,桌面上图标,IE设置, ...
- Linux权限操作(用户和组)
useradd 添加用户useradd -u uid user 创建指定uid的用户-o 配合-u 不检查uid的唯一性-d 指定家目录-s 指定shell-r 创建系统用户-m 强制创建家目录-M ...
- windows本地用户及组的区别
Administrators(超级管理员组) 用来管理注册用户或者具有一定权限的其他管理员,维护网站的运行. Administrators中的用户对计算机/域有不受限制的完全访问权,分配给该组的默认权 ...
- windows server 2012 本地用户和组
- (转)AIX 用户和组管理
AIX 用户和组管理 原文:https://www.ibm.com/developerworks/cn/aix/library/au-aixuseradmin/ 管理 IBM AIX 中的用户和组是管 ...
- Windows中的用户和组以及用户密码处理
目录 用户帐户 Windows 默认账户 Windows 内置用户账户 查看.创建和删除账户 组账户 内置组账户 组的查看.创建和删除 Windows中对用户密码的处理 LM-hash NTLM-ha ...
- 用户与安全 -(1)Linux用户及组管理
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登 ...
- Linux用户和组的管理操作
用户和组的管理操作 命令中涉及的单词和简写: 用户:user:组:group : 增加:add : 修改:modify mod ; 删除 : delete del 增加用户 /etc/ ...
随机推荐
- JAVA保留小数点位数
/** * java 如何保留指定位数的小数 * @author Administrator * */ public class Test04 { public static void main(St ...
- Redis系列(一):Redis简介
一.Redis概述 Redis是一个开源(遵循BSD协议)Key-Value数据结构的内存存储系统,用作数据库.缓存和消息代理.它支持5种数据结构:字符串string.哈希hash.列表list.集合 ...
- PHP array_shift
1.函数的作用:删除数组的头个元素并返回 2.函数的参数: @params array &$array 3.需要注意的例子: <?php /** * http://php.net/ma ...
- [JZOJ100047] 【NOIP2017提高A组模拟7.14】基因变异
Description 21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的 ...
- Spring Boot2 系列教程(十五)定义系统启动任务的两种方式
在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( ...
- C#发送电子邮件(SMTP)及outlook.com账号之概要
这是关于c#发送电子邮件(SMTP)的技术笔记,以”简报“形式呈现. 因为最后成功通过outlook.com发送了邮件,所以,我觉得还是有必要 记录一下其中的要点. 一.技术核心 .net Frame ...
- 那些惊艳的 GIS 轮子
一.前言 GIS 涉及测绘.几何拓扑.人文社科等多方面的科学知识.在 .Net 平台下有着许多优秀的开源产品,比如:MapWindow.SharpMap.WorldWind等.而在这其中,Coordi ...
- js检测页面上一个元素是否已经滚动到了屏幕的可视区域内
应用场景:只要页面加载了,其中在页面中出现的li就向控制台输出第几个发送请求:在本次加载的页面中,再将滚动条滚回前边的li,不再向控制台输出东西,也就是说已经显示过的li,不再向控制台输出东西. &l ...
- spring cloud(Greenwich SR)- Eureka
spring cloud study 本次学习基于spring cloud Greenwich SR1 版本 学习要点: Spring Boot/Spring Cloud应用开发套路 加依赖 加注解 ...
- Hadoop 在 windows 7 64位的配置(二)|非cygwin
第一次使用需要 hdfs namenode -format 一键启动和关闭hadoop 新建文本文档 然后改名 start-hadoop.cmd 里面的内容 @echo off cd /d %HADO ...