将域用户加入本地管理员组(C#、Windows 7、Service)
继前篇《自制Windows 7 注册表键值修改服务》中提出两个问题之后,今天又遇到了另一个新问题。为了避免域内感染病毒,以及防止安装盗版软件等安全问题。公司组策略中不允许域用户加入本地计算机管理员组,这也就意味着没有本机管理员(LAdmin)或域管理员(DAdmin)权限将无法安装任何软件,对于使用Windows 7 系统的用户UAC 会无时不刻的弹出要求输入LAdmin 或DAdmin 的用户名/密码。
解决方法
其实最不用动脑子的方法就是每次用域用户(例如,CompanyDomain\User007)进入系统后,再使用LAdmin 或DAdmin 权限将User007 加入本地管理员组即可,但前提是您必须有管理员权限。有人会问:“直接用本机管理员登录使用不就行了?”这个方案的确可行,但毕竟在域中User007 用户有一些浏览文件服务器目录、邮件等权限,所以如果用LAdmin 登录的话,也时常会遇到需要录入User007 用户名/密码的问题。
最为一劳永逸的方法还是使用服务(Service)。一来服务无需进行手工设置,既省时又省力。二来服务是以管理员权限运行的,也就是说我们不需要什么LAdmin 或DAdmin 就能将User007 加入本地管理员组,这也是使用服务的根本原因。本着这个思路通过System.DirectoryServices 就可以完成一个简单的服务程序。
using System; using System.DirectoryServices; using System.Collections; namespace AddDomainUserToAdminGroup { class AddUserOpt { public static void AddUser() {DirectoryEntry adRoot = new DirectoryEntry(string.Format("WinNT://" + Environment.UserDomainName));DirectoryEntry user = adRoot.Children.Find("User007", "User");bool userIn = false; string userPath = @"WinNT://CompanyDomain/User007"; DirectoryEntry localRoot = new DirectoryEntry("WinNT://" + Environment.MachineName + ",Computer"); DirectoryEntry group = localRoot.Children.Find("Administrators", "Group"); object members = group.Invoke("Members", null); foreach (object member in (IEnumerable)members) { DirectoryEntry userInGroup = new DirectoryEntry(member); if (userInGroup.Path.ToString() == userPath) { userIn = true; break; } } if (!userIn) { group.Invoke("Add", new Object[] { userPath }); } } } }
上面代码首先读取本地管理员组中所有用户,如果用户中不存在User007,则通过DirectoryEntry.Invoke 方法将其加入。另,划掉部分原本是用于获取userPath值(如下代码),但如果计算机没有在域中使用或没有连接网络的话,则服务将无法检测到User007,服务也将无法正常工作。所以直接将userPath 赋为“WinNT://CompanyDomain/User007” 即可。
string userPath = user.Path.ToString();
相关资料
1. DirectoryEntry.Invoke Method
http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry.invoke(v=VS.80).aspx
2. DirectoryEntry Class
http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry(v=VS.80).aspx
出处:{GnieTech} (http://www.cnblogs.com/gnielee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步