使用powershell管理域使用者

2022-06-30 20:45:09 字數 3060 閱讀 3059

在域內環境中,常常需要使用命令列管理域使用者,此時可以使用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建立使用者的四個基本步驟。

下面將作詳細介紹。

要建立使用者這樣的物件,實際上是要對該物件的容器來建立物件。因此首先需要針對容器,執行某種操作,也就是「方法」。第一步需要連線到容器,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開頭只是程式設計標準,但實際變數可以使用任何名稱。

至此,變數$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自動建立。

要合併改動,請使用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()

參考:

域內資訊收集 powershell收集域內資訊

powershell收集域內資訊 powershell 你可以看做cmd的公升級版 但是和cmd完全不一樣 原來的powershe是不能執行任何指令碼的 更改執行策略 這個是乙個繞過的指令碼 接下來我們了解一下 powerview指令碼 接下來是一些命令的演示 先讓powershell可以執行ps指...

Powershell使用管道

管道並不是什麼新事物,以前的cmd控制台也有重定向的命令,例如dir more可以將結果分屏顯示。傳統的cmd管道是基於文字的,但是powershell是基於物件。ps ls sort object descending name select object name,length,lastwrit...

Powershell使用管道

管道並不是什麼新事物,以前的cmd控制台也有重定向的命令,例如dir more可以將結果分屏顯示。傳統的cmd管道是基於文字的,但是powershell是基於物件。ps ls sort object descending name select object name,length,lastwrit...