2016-08-08 3 views
-1

Этот скрипт работал отлично во время тестирования. Я сделал несколько изменений и начал получать ошибку. Затем я вернулся к самому оригинальному сценарию, который я получил из Интернета, и теперь даже он не работает. Возможны следующие ошибки:Добавление нескольких пользователей в 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" 
+0

Извините за испорченный формат –

+1

Итак, вы спрашиваете, что именно? Какое устранение неполадок вы сделали до сих пор? Вы искали, что означают сообщения об ошибках? (Идея состоит в том, чтобы, по крайней мере, выполнить некоторые поверхностные способы устранения неполадок самостоятельно, а не делать «дамп кода», а затем ожидать, что кто-то еще отладит и исправит его для вас.) –

+2

Нарушение ограничений, первая и самая важная ошибка, re спрашивая директорию сделать что-то оно не хочет. Дублирование имени sAMAccountName, дублирование имени пользователяPrincipalName, дублирование имени differName или относительного имени и т. Д. –

ответ

-1

Можете ли вы попробуйте удалить цитаты из

1) присвоение LABUser т.е. CN = $ CN.

2) Удалите CN = с этой линии.

Попробуйте один за другим, я надеюсь, что вы получите ответ.

+0

CN = требуется в этом контексте, аргументы для Create должны содержать класс объекта и относительное различающееся имя. Ниже описывается базовый метод (который представлен на iADSContainer через ADSI) и представлен в упрощенной форме с помощью объекта DirectoryEntry: https://msdn.microsoft.com/en-us/library/aa705987(v=vs.85). ASPX –

Смежные вопросы