Как я могу оптимизировать свой PowerShell - Запрос LDAP?

Эй парни, этот там для гуру PS. Я создал сценарий, который читает из CSV (или другой набор данных, но не регистрация, что сторона), и создает пользователей в моей AD среде.

В основном, независимо от того, что набор данных передается в сценарий, будет обработан, и затем пользователь будет создан, если они не будут существовать. Если пользователь уже существует в AD, то сценарий перескакивает через запись. Это - СОЗДАВАНИЕ только сценария.

Это довольно медленно, и я хотел бы улучшить производительность при хранении функциональности. Можно ли дать мне какие-либо подсказки относительно того, как я могу заставить это работать лучше?

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."
  }
}

Заранее спасибо за любую справку можно предложить.

5
задан buzzedword 18 June 2010 в 20:20
поделиться

1 ответ

Попробуйте использовать статический метод Exists() для поиска пользователя в OU Students:

$user = [ADSI]::Exists("LDAP://cn=$($_.AccountName),ou=Students, dc=live,dc=tcicollege,dc=edu")
if(!$user)  
{      
   "create code goes here"  
}  

Значение $usersOU является статическим, поэтому его можно убрать, поместив перед командой import-csv.

5
ответ дан 14 December 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: