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/ ...
随机推荐
- Spring源码分析之IOC的三种常见用法及源码实现(二)
Spring源码分析之IOC的三种常见用法及源码实现(二) 回顾上文 我们研究的是 AnnotationConfigApplicationContext annotationConfigApplica ...
- python selenium下拉框定位
一.前言 总结一下python+selenium select下拉选择框定位处理的两种方式,以备后续使用时查询: 二.直接定位(XPath) 使用Firebug找到需要定位到的元素,直接右键复制XPa ...
- API---注册表编程
首先来认识一下键,项,值吧: 左边有五个根键: HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USER HKEY_CURREN ...
- Ubuntu php安装xdebug
1.安装xdebug扩展: sudo apt-get install php-xdebug 2.找到扩展的路径: 3.编辑php.ini文件,末尾加入,保存退出: [xdebug] zend_exte ...
- java集合之HashSet哈希SET基础
hashSet实现set接口.serializable.cloneable接口.不允许有重复值,但可以null,不保证与插入顺序一致. HashSet迭代的时间与HashSet实例的大小(元素的数量) ...
- Go语言系列开发之延迟调用和作用域
Hello,各位小伙伴大家好,我是小栈君,最近一段时间我们将继续分享关于go语言基础系列,当然后期小栈君已经在筹划关于java.Python,数据分析.人工智能和大数据等相关系列文章.希望能和大家一起 ...
- Spring Boot提供RESTful接口时的错误处理实践
使用Spring Boot开发微服务的过程中,我们会使用别人提供的接口,也会设计接口给别人使用,这时候微服务应用之间的协作就需要有一定的规范. 基于rpc协议,我们一般有两种思路:(1)提供服务的应用 ...
- 【python数据分析实战】电影票房数据分析(一)数据采集
目录 1.获取url 2.开始采集 3.存入mysql 本文是爬虫及可视化的练习项目,目标是爬取猫眼票房的全部数据并做可视化分析. 1.获取url 我们先打开猫眼票房http://piaofang.m ...
- PostgreSQL使用安装
PostgreSQL使用安装 一. 安装 ubuntu安装: # 安装客户端 sudo apt-get install postgresql-client # 安装服务器 sudo apt-get i ...
- EFCore--->> CodeFirst (Vs2019 Core3.0)的简单使用
直接上干货 EFCore--->> CodeFirst (Vs2019 Core3.0) 1: 安装下面3个对应的package(在Nuget控制台或者直接NuGet包查询点击下载,我喜欢 ...