4
嘿傢伙,這一個是在那裏爲PS大師。我創建了一個腳本,可以從CSV(或其他數據集)中讀取腳本,但不會發布該方面,並在我的AD環境中創建用戶。如何優化我的PowerShell - LDAP查詢?
基本上,無論傳遞到腳本中的數據集都將被處理,然後如果用戶不存在,則會創建一個用戶。如果用戶已經存在於AD中,則該腳本跳過該條目。這是一個CREATE唯一的腳本。
這很慢,我想在保持功能的同時提高性能。你可以給我任何關於如何讓這個表現更好的提示嗎?
import-csv "c:\PSScripts\LDAP\ADMigrate.csv" | ForEach-Object {
# Define the User OU
$usersOU = [ADSI] "LDAP://ou=Students, dc=live,dc=tcicollege,dc=edu"
# Check for existing users
$existingUsers = ($usersOU.psbase.children | Where-Object {$_.psBase.schemaClassName -eq "User"} | Select-Object -expand Name)
$userQuery = $existingUsers -contains $_.'AccountName'
if ($userQuery) {
echo $_.'AccountName' " already exists in Directory."
} else {
# Create a new user
$newUser = $usersOU.create("user","cn=" + $_.'AccountName')
# Set Account AttributesAMAccountName
$newUser.Put("sAMAccountName", $_.'AccountName')
$newUser.Put("givenName", $_.'FirstName')
$newUser.Put("employeeID", $_.'StudentID')
$newUser.Put("sn", $_.'LastName')
$newUser.Put("department", $_.'Department')
$newUser.Put("company", $_.'SyStudentID')
$newUser.Put("UserPrincipalName", $_.'AccountName' + "@live.tcicollege.edu")
$newUser.Put("mail", $_.'AccountName' + "@live.tcicollege.edu")
$newUser.Put("displayName", $_.'LastName' + "," + " " + $_.'FirstName')
# First Commit
$newUser.SetInfo()
$newUser.userAccountControl="66048"
$newUser.Put("pwdLastset", -1)
$newUser.SetPassword($_.'Password')
# Final Commit
$newUser.SetInfo()
echo $_.'AccountName' " created successfully."
}
}
非常感謝您提供任何幫助。
這是一個非常有趣的想法 - 在LDAP級別上處理,而不是查詢LDAP響應,對嗎?我會盡快在其中一個開發節點上實現它,並讓你知道它是如何工作的。我不想標記爲答案 - 如果這顯着提高了表現,我肯定會。 謝謝你的建議!我不喜歡PS中的ADSI接口。或者期間,甚至。 – buzzedword 2010-06-19 05:22:24
np :)順便說一句,Quest有一套免費的cmdlet來管理你的廣告,檢查出來:http://www.quest.com/powershell/activeroles-server.aspx – 2010-06-19 09:44:43
這對我來說工作得很好。謝謝! – buzzedword 2010-06-21 13:55:23