设为首页 收藏本站
查看: 522|回复: 0

将域用户加入本地管理员组(C#、Windows 7、Service)

[复制链接]

尚未签到

发表于 2015-5-9 12:31:24 | 显示全部楼层 |阅读模式
  继前篇《自制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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-65233-1-1.html 上篇帖子: Windows Phone 7触摸屏事件Manipulation的使用 下篇帖子: Windows 7使用MMC管理控制台“远程桌面”功能【转载】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表