PowerShell -LDAPクエリを最適化するにはどうすればよいですか?
-
28-09-2019 - |
質問
やあみんな、これはPSの達人のためにそこにあります。 CSV(または他のデータセットから読み取るが、その側面を投稿しない)から読み取り、広告環境でユーザーを作成するスクリプトを作成しました。
基本的に、スクリプトに渡されるデータセットが処理され、存在しない場合はユーザーが作成されます。ユーザーがすでに広告に存在する場合、スクリプトはエントリをスキップします。これは作成のみのスクリプトです。
かなり遅いので、機能を維持しながらパフォーマンスを改善したいと思います。これをどのようにパフォーマンスすることができるかについてのヒントを教えていただけますか?
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."
}
}
提供できるヘルプを前もってありがとう。
解決
Static Exists()メソッドを試して、ユーザーが学生に存在するかどうかを確認します。
$user = [ADSI]::Exists("LDAP://cn=$($_.AccountName),ou=Students, dc=live,dc=tcicollege,dc=edu")
if(!$user)
{
"create code goes here"
}
$ usersouの値は静的なので、それを取り出して、Import-CSVコマンドの前に配置できます。
所属していません StackOverflow