2014-09-10 4 views
0

Я пишу сценарий, чтобы взять один объект GroupOfNames и создать вторую группу с членами первых групп. Похоже, что это было бы очень простой кусок кода:Как я могу клонировать объект Active Directory GroupOfNames?

$obj = Get-ADObject -Server "$server" -SearchBase $SearchBase -Filter "name -eq '$GroupName'" -Properties Member 
New-ADObject -Server "$server" -Path $SearchBase -Type 'GroupOfNames' -name "$NewGroupName" -OtherAttributes @{'Member'= ($($obj.Member))} 

При запуске этого $ OBJ получает создан, и я могу показать как GroupOfNames информацию, а также список членов. Но когда он называет New-ADObject командлет, я получаю следующее сообщение об ошибке:

New-ADObject : Unable to contact the server. This may be because this server does not exist, it is currently down, or it does not have the Active Directory Web Services running. 

Я пробовал несколько вариантов кода, и все не в состоянии с подобными ошибками.

Интересно, что если я прокручиваю список членов и добавляю их в группу по одному, он работает, но он слишком длительный (час + против секунд).

ответ

0

После нескольких проб и ошибок, я обнаружил, что я мог бы надежно добавить о 6000 членов одновременно. Вот основной поток:

(Get-ADObject -Server "$server" -SearchBase $SearchBase -Filter { name -eq "$GroupName" } -Properties Member).Member | %{ 
    $SubList += [string] $_ 
    if($SubList.count -ge 6000) { 
     Set-ADObject -Server "$server" -Identity $NewGroup -Add @{'Member'= ($SubList)} 
     $SubList = @() 
    } 
} 
if($SubList.count -gt 0) { 
    Set-ADObject -Server "$server" -Identity $NewGroup -Add @{'Member'= ($SubList)} 
} 

Спасибо @Raf за толкание в правильном направлении.

0

Попробуйте, это бросает результаты первого запроса, ADPropertyValueCollection, в массив строк (непроверенные!):

$obj = Get-ADObject -Server "$server" -SearchBase $SearchBase 
    -Filter "name -eq '$GroupName'" -Properties Member 
$m = [string[]]$obj.Member 
New-ADObject -Server "$server" -Path $SearchBase -Type 'GroupOfNames' 
    -name "$NewGroupName" -OtherAttributes @{'Member'= $m} 
+0

Благодарим за предложение. Без изменений. Я получаю ту же ошибку. Я также пробовал другие комбинации этого, например $ m = $ member | % {"'$ ($ _)'"), думая, что, возможно, строка должна быть процитирована. Каждая комбинация не удалась. – North2Alaska

+0

Ошибка явно красная селедка. Попробуйте запустить '$ error [0] | fl * -Force' сразу после ошибки, он может проливать больше света на ситуацию. – Raf

+0

Я думаю, что ты прав. Принимая ваш код сверху, я получаю большое количество информации об ошибках. Я думаю, что самая важная вещь может быть «Это может быть вызвано ошибкой обработки вашего сообщения или превышением времени ожидания удаленного узла или проблемы с сетевым ресурсом. Локальный тайм-аут сокета был «00: 02: 00». Затем я провел некоторое дополнительное исследование, чтобы обнаружить жесткий двухминутный тайм-аут с использованием модуля AD. Похоже, мне, возможно, придется переделать, используя ADO или какой-либо другой метод. Предложения? – North2Alaska