windows账户管理

最近部署人员给我们提了一个需求,就是希望简化部署过程。

为了能够远程桌面控制终端电脑,他们需要为每台终端设置进行一些设置,例如创建用户名和密码,开启允许

远程桌面设置,以及开机免登录的设置,这部分的操作加大了部署人员的工作量,所以他们提出是否能够提供

一个软件,直接在终端设备上安装一下,那么这些设置就自动设置好了,而且还能支持后面平台下发修改用户名

和密码的功能。所以有了这些功能的探索,注册表修改部分,用到了注册表比对工具现整理一下成果。

创建管理员账户

//传入参数:Username要创建的用户名,Userpassword用户密码,Path主文件夹路径
public static bool CreateNTUser(string username, string userpassword, string path)
{
try
{
DirectoryEntry obDirEntry = new DirectoryEntry("WinNT://" + Environment.MachineName); DirectoryEntry obUser = obDirEntry.Children.Add(username, "User"); //增加用户名
obUser.Properties["FullName"].Add(username); //用户全称
obUser.Invoke("SetPassword", userpassword); //用户密码
obUser.Invoke("Put", "Description", "远程用户");//用户详细描述
//obUser.Invoke("Put","PasswordExpired",1); //用户下次登录需更改密码
obUser.Invoke("Put", "UserFlags", 66049); //密码永不过期
obUser.Invoke("Put", "HomeDirectory", path); //主文件夹路径
obUser.CommitChanges();//保存用户
//DirectoryEntry grp = obDirEntry.Children.Find("Users", "group");//Users组
DirectoryEntry grp = obDirEntry.Children.Find("Administrators", "group");
if (grp.Name != "")
{
grp.Invoke("Add", obUser.Path.ToString());//将用户添加到某组
}
return true;
}
catch(Exception ex)
{
RGCommon.Log(ex.Message);
return false;
}
}

删除账户

 //传入参数:Username用户名
public static bool DelNTUser(string Username)
{
try
{
DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
DirectoryEntry obUser = localMachine.Children.Find(Username, "User");//找得用户
localMachine.Children.Remove(obUser);//删除用户
localMachine.Close();
return true;
}
catch(Exception ex)
{
RGCommon.Log(ex.Message);
return false;
}
}

重命名账户

/// <summary>
/// 重命名账户
/// </summary>
/// <param name="username"></param>
/// <param name="newname"></param>
/// <returns></returns>
public static bool Rename(string username, string newname)
{
try
{
DirectoryEntry localMachine = new DirectoryEntry($"WinNT://{Environment.MachineName},computer");
DirectoryEntry obUser = localMachine.Children.Find(username, "User");
obUser.Rename(newname);//重命名
obUser.CommitChanges();
obUser.Close();
localMachine.Close();
return true;
}
catch (Exception ex)
{
RGCommon.Log(ex.Message);
return false;
}
}

修改用户密码

//修改NT用户密码
//传入参数:Username用户名,Userpassword用户新密码
public static bool InitNTPwd(string username, string userpassword)
{
try
{
DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
DirectoryEntry obUser = localMachine.Children.Find(username, "User");
obUser.Invoke("SetPassword", userpassword);
obUser.CommitChanges();
obUser.Close();
localMachine.Close();
return true;
}
catch(Exception ex)
{
RGCommon.Log(ex.Message);
return false;
}
}

判断用户是否存在

/// <summary>
/// 判断用户是否存在
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public static bool ExistWinUser(string userName)
{
try
{
using(DirectoryEntry localMachine = new DirectoryEntry($"WinNT://{Environment.MachineName},computer"))
{
var user = localMachine.Children.Find(userName, "user");
return user != null;
}
}
catch(Exception ex)
{
RGCommon.Log(ex.Message);
}
return false;
}

启用/禁用账户

 /// <summary>
/// 启用/禁用账户
/// </summary>
/// <param name="userName"></param>
/// <param name="isDisable"></param>
public static void Disable(string userName, bool isDisable)
{
DirectoryEntry user = new DirectoryEntry($"WinNT://{Environment.MachineName}/{userName},user");
user.InvokeSet("AccountDisabled", isDisable);
user.CommitChanges();
user.Close();
}

防火墙入站规则添加

/// <summary>
/// 添加入站规则
/// </summary>
/// <param name="name"></param>
/// <param name="port">要入站的端口号</param>
/// <param name="protocol"></param>
public static void NetFwAddPorts(string name, int port, string protocol)
{
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
INetFwOpenPort objPort = (INetFwOpenPort)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwOpenPort"));
objPort.Name = name;
objPort.Port = port;
if(protocol.ToUpper() == "TCP")
{
objPort.Protocol = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;
}
else
{
objPort.Protocol = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP;
}
objPort.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_ALL;
objPort.Enabled = true;
bool exist = false;
//加入到防火墙管理策略
foreach(INetFwOpenPort mPort in netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts)
{
if(objPort == mPort)
{
exist = true;
break;
}
}
if (!exist)
{
netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(objPort);
}
}

开机免登录设置

/// <summary>
/// 免登陆设置
/// </summary>
public static void AutoAdminLogon(string userName, string password)
{
Microsoft.Win32.RegistryKey root = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, Microsoft.Win32.RegistryView.Registry64);
Microsoft.Win32.RegistryKey item = root.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\", true);
if(item != null)
{
item.SetValue("AutoAdminLogon", "1");
item.SetValue("DefaultUserName", userName);
item.SetValue("DefaultPassword", password);
}
}

允许远程桌面设置

/// <summary>
/// 允许远程桌面设置
/// </summary>
public static void AllowRemote()
{
Microsoft.Win32.RegistryKey root = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, Microsoft.Win32.RegistryView.Registry64);
Microsoft.Win32.RegistryKey item = root.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Remote Assistance\", true);
if(item != null)
{
item.SetValue("fAllowToGetHelp", "1");
}
item = root.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server\", true);
if(item != null)
{
item.SetValue("fDenyTSConnections", 0, Microsoft.Win32.RegistryValueKind.DWord);
}
item = root.OpenSubKey(@"SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules\", true);
if(item != null)
{
item.SetValue("RemoteDesktop-In-TCP", "v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=6|LPort=3389|App=System|Name=@FirewallAPI.dll,-28753|Desc=@FirewallAPI.dll,-28756|EmbedCtxt=@FirewallAPI.dll,-28752|");
}
}

Windows账户管理的更多相关文章

  1. Windows Services windows域账户管理

    windows  域账户管理 一.什么是域账户: 域账户是域是网络对象的分组.例如:用户.组和计算机.域中所有的对象都存储在 Active Directory 下.Active Directory 可 ...

  2. MySQL之账户管理

    MySQL之账户管理 账户管理是MySQL用户管理最基本的内容.包括登录,退出MySQL服务器.创建用户.删除用户.密码管理和权限管理等内容. 其中登录方式非常简单,在这个地址有:http://www ...

  3. 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它

    无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer.Windows服务器管理工具或NET START命令启动它 1. ...

  4. Windows上管理远程Linux VPS/服务器文件工具 - winscp

    Linux上经常会经常需要编辑文件,特别是Linux VPS/服务器安装好系统之后配置环境会需要修改很多的配置文件等,对于常用Linux的基本上都能够熟练使用vi或者nano等SSH下面的文件编辑工具 ...

  5. [Winform]一个简单的账户管理工具

    最近一直觉得注册的账户越来越多,帐号密码神马的容易弄混.自己就折腾了一个简单的账户管理工具,其实实现也挺简单,将每个账户的密码及相关密码提示信息,经aes算法加密之后保存到数据库,当前登录用户可以查询 ...

  6. CentOS下的账户管理

    在Linux中,每个文件都分3类权限:账户本身的权限,账户所在群组的权限和其它权限.账户和群组是多对多的关系,即一个账户可以属于多个群组,一个群组可以包含多个账户.但是,对于每一个已登录的账户,只能存 ...

  7. Windows内存管理[转]

    本文主要内容:1.基本概念:物理内存.虚拟内存:物理地址.虚拟地址.逻辑地址:页目录,页表2.Windows内存管理3.CPU段式内存管理4.CPU页式内存管理 一.基本概念1. 两个内存概念物理内存 ...

  8. Chocolatey:Windows软件包管理器

    Chocolatey 2016-08-03 https://chocolatey.org/ Chocolatey是一个Windows软件包管理器,就像Nuget或者npm,或者说类似Linux上的ap ...

  9. windows内存管理方式以及优缺点

    Windows内存管理方式:页式管理,段式管理,段页式管理 页式管理 将各进程的虚拟空间(逻辑地址)划分为若干个长度相等的页,业内管理把内存空间(物理内存)按照页的大小划分为片或者页面,从而实现了离散 ...

随机推荐

  1. Linux 服务器安装jdk,mysql,tomcat简要教程

    linux服务器是阿里云上买的,学生价9.9/月,拿来学习下. 需要准备软件工具: 1.editplus (编辑服务器上的文件) 2.PuTTY (Linux命令连接器) 3.FlashFXP(上传文 ...

  2. tomcat 配置域名部署war 项目

    第一步把打包好的war包 放到 tomcat目录下的webapps 下 截图: 第二步:找到tomcat目录下的server.xml配置文件 server.xml在conf文件夹下面 编辑server ...

  3. Linux 解压小全

    .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .zip 解压:unzip FileName.zip 压缩:zi ...

  4. VLC和Qt结合编写流媒体rtsp播放器

            VLC播放器是一款功能强大且小巧的播放器,它支持多种多样的音视频格式,比如MPEG1,2以及mp3等等.并且通过Qt和VLC的结合能让每个开发者写出自己的视频流媒体播放器.     Q ...

  5. laravel 先orderBY再groupby,导致分组后的排序不正确

    //联系过我的经纪人 $appletChats=$this->AppletChat->orderBy('created_at','desc')->where([['user_id', ...

  6. logstash的index值可以为中文

    logstash中的 output中 有index属性,表示在elk中的主键标识. 在实际应用中,index的值不能为大写字母,可以是小写字母.数字.下划线.中文. 这里重点强调index为中文时,注 ...

  7. DP&图论 DAY 5 上午

    DP&图论  DAY 5  上午 POJ 1125 Stockbroker Grapevine 有 N 个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径.现在有一个消息要由某个人开 ...

  8. Mac下搭建Vue开发环境

    认知: 注:上面的图片转自Vue2.0 新手入门 — 从环境搭建到发布 1.安装brew 打开终端运行以下命令: /usr/bin/ruby -e "$(curl -fsSL https:/ ...

  9. Ubuntu16.04使用apt安装完nginx常见问题

    1.安装完并remove掉后重新install后没nginx.conf文件 解决办法: apt-get -y --purge remove nginx* apt-get -y autoremove a ...

  10. 转: zepto的使用方法

    有些不了解zepto的同学在刚接触的时候肯定有很多疑惑,这个东西怎么用啊,去哪里下载啊,什么时候该用什么时候不该用啊,其实我以前也是这样的.jquery使用多了那么就让我们一起来了解下zepto把. ...