使用powershell管理域用户
在域内环境中,常常需要使用命令行管理域用户,此时可以使用Active Directory中的命令行工具Dsquery.exe,或CSVE,以及Ldifde等,其实,使用Windows Powershell来进行管理操作也是相当的方便。
下面以创建用户举例:
创建域用户最基本的Windows Powershell脚本类似这样:
$objOU=[ADSI]”LDAP://OU=People,DC=contoso,DC=com” $objUser=$objU.Create(“user”,”CN=Mary North”) $odjUser.Put=(“sAMAccountName”,”mary.north”) $objUser.SetInfo()
上述代码列举了在Active Directory
中使用Windows Powershell
创建用户的四个基本步骤。
下面将作详细介绍。
连接到Active Directory
容器
要创建用户这样的对象,实际上是要对该对象的容器来创建对象。因此首先需要针对容器,执行某种操作,也就是“方法”。第一步需要连接到容器,Windows Powershell
可以使用Active Directory
服务接口类型适配器切入到Active Directory
对象。要连接Active Directory
对象,必须提交LDAP
查询字符串,也就是LDAP://协议标识符
,后跟对象的DN
。因此第一行代码应该像下面这样:
$objOU=[ADSI]"LDAP://OU=People,DC=contoso,DC=com"
Windows Powershell
需要使用ADSI
类型适配器创建代表People OU
的对象,并将其分配给分量。名为objOU
的变量反映了对变量类型进行标识,以obj开头只是编程标准,但实际变量可以使用任何名称。
调用Create
方法
至此,变量$objOU
就可以代表People OU
。接着即可使用容器的create
方法让容器创建对象。Create
方法需要提供两个参数:对象类和对象RDN
。对象的RDN
是指该对象在父容器下的名称位置,大部分对象类则使用"CN=对象名"
这样的格式作为自己的RDN
。然而OU
的RDN
是"OU=组织单位名称"
这样的格式,而域的RDN
是"DN=域名"
。因此下列代码可以使用"CN=Mary North"
这样的RDN
创建用户对象:
$objUser=$objU.Create(“user”,”CN=Mary North”)
生成的对象结果会分配给变量$objUser
,并用该变量代表要创建的对象,可供后续操作。
填写用户属性
这里需要注意一个问题,在将改动合并之前,新对象和其进行的改动都不会保存,而在填写所有必要的属性之前,还不能成功合并改动。用户对象的必须舒心包括windows 2000
前登陆名。该属性的LDAP
名称是sAMAccountName
,因此代码的下一行需要为对象指派sAMAccountName
,此时需要使用Put
方法。Put
是为对象写入属性的标准方法,Get
则是检索对象属性的标准方法,此处的代码应该像下面这样:
$odjUser.Put=(“sAMAccountName”,”Mary North”)
对于用户对象,还有其他强制属性,包括对象的安全标识符(SID),但这些对象会在将新用户提交到目录的时候用Active Directory
自动创建。
使用SetInfo
方法合并改动
要合并改动,请使用Active Directory
对象的SetInfo
方法。此处的代码应该像下面这样:
$objUser.SetInfo()
填写其他用户属性
上述命令将创建只包含强制sAMAccountName
属性的用户,在创建用户对象时,还需要填写其他用户属性。前面介绍了使用用户对象的Put
方法写入属性,因此这里只需要重复调用该方法,指定需要添加的每个属性即可:
$odjUser.Put=(“sAMAccountName”, ”$samAccountName”) $odjUser.Put=(“displayName”, ”$displayname”) $odjUser.Put=(“sn”, “$sn”) $objUser.SetInfo()
用户的密码又怎么办?使用Put
方法无法设置用户密码,相反此时应当使用SetPassword
方法,例如这样:
$objUser.SetPassword(“passwd”)
然而SetPassword
方法只能在创建好用户并调用SetInfo()
方法之后使用,这意味着实际上,我们是首选创建好账户,随即才为其设置密码。这并不是Windows Powershell
的Bug
或局限,而是Kerberos
和LDAP
的实际要求。不过安全性并不会受损,因为这样创建的账户处于禁用状态。
因此账户的状态实际上是一种标志(flag),无法直接使用Put
命令设置。此时需要下列命令:
$objUser.psbase.InvokeSet(“AccountDisabled”,$false) $objUser.SetInfo()
作者: 咕咚!
出处: https://www.cnblogs.com/linga/
关于作者:专注虚拟化,运维开发,RPA,Rust,Go,Python!
本文版权归作者和博客园共有,禁止*.csdn.net转载,禁止以盈利为目的的转载,转载文章,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(oldsixa@163.com)咨询.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)