今天学习了下怎么用.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. vue-cli中使用jquery

    一.安装依赖 npm install jquery --save 二.全局导入(必须先安装依赖) 第一步 在webpack.base.conf.js里加入(新版的可能找不到这个文件,你可以npm in ...

  2. Sieve of Eratosthenes时间复杂度的感性证明

    上代码. #include<cstdio> #include<cstdlib> #include<cstring> #define reg register con ...

  3. go-json类

    package main import ( "encoding/json" "fmt" ) /* { "company":"itc ...

  4. spring cloud alibaba 简介

    ### Spring Cloud Alibaba [官方github地址](https://github.com/alibaba/spring-cloud-alibaba) Spring Cloud ...

  5. 卡特兰(Catalan)数入门详解

    也许更好的阅读体验 基本概念 介绍 学卡特兰数我觉得可能比组合数要难一点,因为组合数可以很明确的告诉你那个公式是在干什么,而卡特兰数却像是在用大量例子来解释什么时卡特兰数 这里,我对卡特兰数做一点自己 ...

  6. 基于STM32F103和Cube的输入捕获例程

    1.开发环境 (1)Cube5.24 (2)Keil5 (3)STM32F103 2.Cube配置 Cube配置很简单,只要打开TIM4通道1的引脚,设置为输入捕获模式,在配置是高或低电平沿触发 TI ...

  7. Redis备忘(二)

    内存回收: 有时候发现10g的Redis删掉1g的key,内存占用没啥变化,因为内存页分配,有的页面可能还存在key,整个页面不能回收. 主从同步: CAP原理:一致性 可用性 分区容忍性 redis ...

  8. Swift3 Xcode8 Ios10 开发笔记

    设置不同subView的层次: //将subView挪到最上边 self.view.bringSubviewToFront(subView) //将subView挪到最下边 self.view.sen ...

  9. VBoxManage.exe: error: Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, CL SID_VirtualBox w/ IUnknown works.

    我先把vagrantbox卸载了 重新装了一个 然后提示这个错误 当时我一脸蒙逼 后来经过百度 1, win+r 快捷键打开 “运行”,输入regedit 打开注册表 2,找到 HKEY_CLASSE ...

  10. Python爬虫常用小技巧之设置代理IP

    设置代理IP的原因 我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站.假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问.所以你可以设置一些代理服务器来 ...