Этот скрипт работал отлично во время тестирования. Я сделал несколько изменений и начал получать ошибку. Затем я вернулся к самому оригинальному сценарию, который я получил из Интернета, и теперь даже он не работает. Возможны следующие ошибки:Добавление нескольких пользователей в AD
Exception calling "SetInfo" with "0" argument(s): "A constraint violation occurred." At C:\Scripts\CreateTest2.ps1:51 char:2 + $LABUser.SetInfo() + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI Exception calling "Invoke" with "2" argument(s): "There is no such object on the server." At C:\Scripts\CreateTest2.ps1:55 char:2 + $LABUser.psbase.invoke("setPassword", $Pwrd) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodTargetInvocation Exception calling "InvokeSet" with "2" argument(s): "The directory property cannot be found in the cache" At C:\Scripts\CreateTest2.ps1:56 char:2 + $LABUser.psbase.invokeSet("AccountDisabled", $false) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodTargetInvocation Exception calling "CommitChanges" with "0" argument(s): "A constraint violation occurred." At C:\Scripts\CreateTest2.ps1:57 char:2 + $LABUser.psbase.CommitChanges() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException
Вот сценарий. Что я делаю не так?
function Select-FileDialog {
param(
[string]$Title,
[string]$Directory,
[string]$Filter = "CSV Files(*.csv)|*.csv"
)
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
$objForm = New-Object System.Windows.Forms.OpenFileDialog
$objForm.InitialDirectory = $Directory
$objForm.Filter = $Filter
$objForm.Title = $Title
$objForm.ShowHelp = $true
$Show = $objForm.ShowDialog()
if ($Show -eq "OK") {
return $objForm.FileName
} else {
exit
}
}
$FileName = Select-FileDialog -Title "Import an CSV file" -Directory "c:\"
$SelectOU = "OU=Test2,OU=Users,OU=Domain Controllers"
$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetComputerDomain()
$DomainDN = (([System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()).Domains | ? {$_.Name -eq $domain}).GetDirectoryEntry().distinguishedName
$final = "LDAP://$DomainDN"
$DomainPath = [ADSI]"$final"
$UserInformation = Import-Csv $FileName
$OUPath = "LDAP://$SelectOU,$DomainDN"
$UserPath = [ADSI]"$OUPath"
foreach ($User in $UserInformation) {
$CN = $User.samAccountName
$SN = $User.Surname
$Given = $User.givenName
$samAccountName = $User.samAccountName
$Display = $User.DisplayName
$LABUser = $UserPath.Create("User", "CN=$CN")
Write-Host "Please Wait..."
$LABUser.Put("samAccountName", $samAccountName)
$LABUser.Put("sn", $SN)
$LABUser.Put("givenName", $Given)
$LABUser.Put("displayName", $Display)
$LABUser.Put("userPrincipalName", "[email protected]$domain")
$LABUser.SetInfo()
$Pwrd = $User.Password
$LABUser.psbase.invoke("setPassword", $Pwrd)
$LABUser.psbase.invokeSet("AccountDisabled", $false)
$LABUser.psbase.CommitChanges()
}
Write-Host "Script Completed"
Извините за испорченный формат –
Итак, вы спрашиваете, что именно? Какое устранение неполадок вы сделали до сих пор? Вы искали, что означают сообщения об ошибках? (Идея состоит в том, чтобы, по крайней мере, выполнить некоторые поверхностные способы устранения неполадок самостоятельно, а не делать «дамп кода», а затем ожидать, что кто-то еще отладит и исправит его для вас.) –
Нарушение ограничений, первая и самая важная ошибка, re спрашивая директорию сделать что-то оно не хочет. Дублирование имени sAMAccountName, дублирование имени пользователяPrincipalName, дублирование имени differName или относительного имени и т. Д. –