
// Add the user to the group.
group.Properties["member"].Add(userDN)
// Commit the changes to the group.
group.CommitChanges()
执行上述代码即可获取到在某个指定组织单元的所有用户,搜索结果存放在src中,要读取用户属性值可使用下面代码:[csharp] view plaincopy//获取用户的名称和账户 foreach (SearchResult sr in src) { strUserName=sr.Properties["name"][0].ToString()strUserName= sr.Properties["userPrincipalName"][0].ToString()} 值得注意的是因为在创建AD用户的时候填写的用户信息不同,每个AD用户所具有的属性都不一定相同,建议使用如下方法进行取值:[csharp] view plaincopyif (sr.Properties.Contains("sn")) { strFirstName = sr.Properties["sn"][0].ToString()//姓 } if (sr.Properties.Contains("givenName")) { strLastName = sr.Properties["givenName"][0].ToString()//名 } 要知道一个用户的所有属性可使用如下代码:[csharp] view plaincopyforeach (string strPropNamein sr.Properties.PropertyNames) { Console.WriteLine(strPropName)} 还有一种读取AD用户属性字段值的方法:[csharp] view plaincopyforeach (SearchResult sr in src) { DirectoryEntry myde = sr.GetDirectoryEntry()strGuid = myde.Guid.ToString()//用户Guid,创建用户时由系统自动生成 strParentGuid = myde.Parent.Guid.ToString()//用户所在组织单元的Guid myde.Properties["name"][0].ToString()//用户名称 } 同样的,如果要得到是AD组织单元或者群组的话也是这么做,对应于组织单元筛选字符串可以这么写:[csharp] view plaincopy//字符筛选器,筛选类型为OU的对象 string strFilter = "(&(objectCategory=organizationalUnit)(objectClass=organizationalUnit))"群组的筛选字符串:[csharp] view plaincopystring strFilter = "(&(objectCategory=group)(objectClass=group))"上面是对AD的查询 *** 作,如果查询之后需要修改,仅需要做些许变动,下面是修改用户属性部分代码:[csharp] view plaincopyforeach (SearchResult sr in src) { string strUserName = sr.Properties["name"][0].ToString()//targetUserName:要修改用户名称 if (strUserName.Equals(targetUserName)) { DirectoryEntryde = sr.GetDirectoryEntry()de.Properties["sn"].Value = m_User.FirstName//姓 de.Properties["givenName"].Value = m_User.LastName//名 de.Properties["mobile"].Value = m_User.Mobile//移动电话 de.CommitChanges()} } 修改AD组织单元或者群组也是用类似的方法。H粢?駻D中添加用户,组织单元或者群组的话也是需要通过DirectoryEntry来添加,如下是向AD的指定路径添加一个用户:[csharp] view plaincopypublic bool AddUser2AD(string strUserName, string strSAMAccountname, string strPassword, string strPath) { string strname = "CN=" + strUserNametry { // strADAccount ,strADPassword为AD管理员账户和密码 DirectoryEntry objDE = new DirectoryEntry(strPath, strADAccount, strADPassword)DirectoryEntries objDES = objDE.ChildrenDirectoryEntry myDE = objDES.Add(strname, "User")myDE.Properties["userPrincipalName"].Value = strSAMAccountnamemyDE.Properties["name"].Value = strUserNamemyDE.Properties["sAMAccountName"].Value = strSAMAccountnamemyDE.CommitChanges()//设置密码 IADsUser objUser = myDE.NativeObject as IADsUserobjUser.SetPassword(strPassword)//设置用户状态:密码永不过期(65536)+用户正常(512)= 66048 objUser.Put("userAccountControl", 66048)objUser.SetInfo()} catch { return false} return true} 特别要注意最后几行设置用户密码和账户状态代码。---洛洛根据我的研究,在Windows系统中暂时不提供工具直接实现这种功能。您可以先将需要加入到本地管理员组的域用户放入一个OU中,然后通过组策略执行脚本来完成。下面我提供一些方法,供您参考:1.使用域管理员登陆到DC。活动目录seo2.打开记事本创建一个批处理文件,输入以下内容,并以*.bat保存:net localgroup administrators domain\user /add其中,USER为你当前需要提升权限的用户名。3.点击“开始→运行”并输入“DSA.MSC”→打开Active Director用户和计算机→右键点击需要设置的OU→“属性”→组策略→“编辑”。4.打开“计算机配置→windows设置→脚本→启动→添加*.bat文件。5.在命令提示符下输入gpupdate /force,重启计算机。Tom Zhang 张一平 在线技术支持工程师 微软全球技术支持中心各位,net user %username% administrators /add 这个脚本会无法执行的。因为要想加入本地管理员组,就需要管理员权限,也就是说只能用计算机登录脚本在用户登录之前执行但此时用户还没有登录,根本无从获取 %username%变量。登录之后,倒是获取到 %username%变量了,但普通的users权限是不能添加管理员群组账户的。这个问题的解决方法,有二要不,用runas,使用管理员账户在用户登录之后添加,但将管理员账户和密码写在脚本里非常不安全。要不,就是只能做计算机启动脚本,将domain users这个组添加到本地管理员群组中去。但又会让所有域用户都可以在域中任何一台电脑上,执行管理员权限,这样做也不安全。用户之所以有这样的需求,其实是为了避免用户 *** 作或者客户端软件在域环境中遭遇的权限限制问题,如果说用户这么做只是暂时的权益之计,尚可,否则就是与活动目录的宗旨背道而驰!最终的解决方法还是要解决用户在域中所遇到的问题,例如软件权限限制问题的解决方法可以参考欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)