2014-09-10 1 views
0

J'écris un script pour prendre un objet GroupOfNames et créer un deuxième groupe avec les membres du premier groupe. Il semble que ce serait un morceau très simple de code:Comment puis-je cloner un objet 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))} 

Quand je lance ce l'obj $ est créé et je peux afficher à la fois les informations GroupOfNames, ainsi que la liste des membres. Mais quand il appelle l'applet de commande New-ADObject, je reçois l'erreur suivante:

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. 

J'ai essayé plusieurs variantes du code et échouons tous avec des erreurs similaires. Il est intéressant de noter que si je parcourt la liste des membres et que je les ajoute au groupe un à la fois, cela fonctionne, mais cela prend beaucoup trop de temps (une heure + en secondes).

Répondre

0

Après quelques essais et erreurs, j'ai trouvé que je pouvais fiable ajouter environ 6000 membres à la fois. Voici le flux de base:

(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)} 
} 

Merci @Raf pour le pousser dans la bonne direction.

0

Essayez cela, il jette les résultats de votre première requête, ADPropertyValueCollection, à un tableau de chaînes (non testé!):

$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

Nous vous remercions de votre suggestion. Pas de changement. J'ai la même erreur. J'ai aussi essayé d'autres combinaisons, comme $ m = $ member | % {"'$ ($ _)'"), pensant que peut-être la chaîne devait être citée. Chaque combinaison a échoué jusqu'à présent. – North2Alaska

+0

L'erreur est clairement un hareng rouge. Essayez d'exécuter '$ error [0] | fl * «Force» juste après l'erreur, il pourrait jeter plus de lumière sur la situation. – Raf

+0

Je pense que vous avez raison. Prenant votre code ci-dessus, je reçois une grande quantité d'informations d'erreur. Je pense que la chose la plus révélatrice peut être: Cela peut être dû à une erreur de traitement de votre message ou à un dépassement du délai de réception par l'hôte distant ou à un problème de ressource réseau sous-jacent. Le délai d'attente du socket local était de '00: 02: 00 '. J'ai ensuite effectué des recherches supplémentaires pour découvrir un délai d'attente de deux minutes en utilisant le module AD. On dirait que je dois rééquiper en utilisant ADO ou une autre méthode. Suggestions? – North2Alaska