2014-09-10 155 views
0

我正在編寫一個腳本,以接收一個GroupOfNames對象並創建第一個組成員的第二個組。看起來這將是一個非常簡單的代碼:如何克隆GroupOfNames Active Directory對象?

$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 cmdlet時,我得到以下錯誤:

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. 

我試過的代碼版本,並全部失敗,類似的錯誤。有趣的是,如果我循環遍歷成員列表並將它們一次一個地添加到組中,它就可以工作,但它需要太長時間(一個小時+ vs秒)。

回答

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 2014-09-11 20:04:16

+0

錯誤顯然是一條紅鯡魚。嘗試運行'$ error [0] |在錯誤發生之後,它可能會使情況更加明朗。 – Raf 2014-09-12 08:48:22

+0

我認爲你是對的。從上面的代碼中,我收到了大量的錯誤信息。我認爲最有說服力的事情可能是'這可能是由處理您的消息時出錯或遠程主機超出接收超時或基礎網絡資源問題引起的。本地套接字超時是'00:02:00'然後我做了一些額外的研究,發現使用AD模塊的兩分鐘超時。看起來我可能不得不使用ADO或其他方法進行重組。建議? – North2Alaska 2014-09-12 17:03:27