Эй, ребята, это один для гуру 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, правильно? Я реализую его как можно скорее на одном из узлов dev и дам вам знать, как это работает. Я не хочу отмечать как ответ еще - если это значительно улучшит производительность, я определенно буду. Благодарим за предложение! Мне не нравится интерфейс ADSI в PS. Или период, даже. – buzzedword
np :) BTW, Quest имеет бесплатный набор командлетов для управления вашим AD, проверьте его: http://www.quest.com/powershell/activeroles-server.aspx –
Это сработало для меня отлично. Благодаря! – buzzedword