zoukankan      html  css  js  c++  java
  • 使用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。然而OURDN"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 PowershellBug或局限,而是KerberosLDAP的实际要求。不过安全性并不会受损,因为这样创建的账户处于禁用状态。
    因此账户的状态实际上是一种标志(flag),无法直接使用Put命令设置。此时需要下列命令:

    $objUser.psbase.InvokeSet(“AccountDisabled”,$false)
    $objUser.SetInfo()
    

    参考:https://www.cnblogs.com/index-htm/p/5412524.html

  • 相关阅读:
    关于WPF 中 “System.Windows.Markup.XamlParseException”类型的未经处理的异常在 PresentationFramework.dll 中发生 异常的处理。
    RelativePanel 属性说明
    c# winform中遍历控件
    wpf中遍历界面控件的方法
    wpf 处理倒计时问题
    wpf 处理获取鼠标点击方法
    界面控件委托方式 wpf
    如何在WPF 应用中获取窗体或控件的句柄
    关系型数据库版本控制之(Flask SQLalchemy Alembic )
    项目管理方法论之六西格玛管理
  • 原文地址:https://www.cnblogs.com/linga/p/11211928.html
Copyright © 2011-2022 走看看