使用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()

來源 http://www.rootat.net/2016/04/18/ManageADUserByPowershell/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM