none
Раскидать пользьвателей и группы по контейнерам RRS feed

  • Вопрос

  • Доброго всем дня.
    Сразу оговорюсь, я пока в скриптописании полный нуб. По этому прошу помощи. Опишу ситуацию, есть исходный домен с больше чем 700 контейнерами и кучей пользователей и групп. И есть Целевой домен, в который в один контейнер с помощью ADMT были перенесены все пользователи и группы. С помощью dsquery ou domainroot и dsadd ou в целевом домене была создана идинтичная структура OU. Задача теперь стоит в том чтоб распихать по ним пользователей и группы как это было в исходном домене. Я понимаю что можно было отдельно по каждому OU переносить, но их уж больно моного. Но если варианта не будет так и буду переносить по штучно. Вопрос в том можно ли это как-то сделать через скрипт чтоб разом всех пользователей и группы раскидать по OU
    --------------------
    P.S. группы и пользователи перенесены с сохранением SID
    доверительные отношения есть между доменами

    Зарание благодарен за помощь
    22 февраля 2009 г. 5:52

Ответы

  • Готово. Скрипт на PowerShell
    Коментарии по тексту.
    В качечтве теста, конечно, лучше поместить пару пользователей в отдельный контейнер и потренироваться на них.
    Если поможет - не забудьте пометить как ответ. Долго старался :-)

    #Заменить имя OU  
    $Ou="Migr_users"
    #Заменить имя нового домена  
    $Domain1="DC=domain_new,DC=ru"
    #Заменить имястарого домена  
    $Domain2="DC=domain_old,DC=ru"
    #Ищем пользователей в OU  
    $Path1 = "LDAP://OU=" + $OU + "," + $domain1  
    $Path2 = "LDAP://" + $domain2  
    $Search = New-Object DirectoryServices.DirectorySearcher([ADSI]$Path1)  
    $Search.filter = "(&(objectCategory=user)(cn=*))" 
    $Users = $Search.Findall()
    # для каждого  
    foreach ($User_n in $Users ){
    #находим соотв. в старом домене  
    $User = [ADSI]$User_n.Path  
    $USerName = [string]$User.Name  
    $Search2 = New-Object DirectoryServices.DirectorySearcher([ADSI]$Path2)  
    $Search2.filter = "(&(objectCategory=user)(cn=$USerName))" 
    $User_old = $Search2.FindOne()
    #меняем в пути имя домена  
    $User_old = [ADSI]$User_old.Path  
    $User_old_tmp = [string]$User_old.distinguishedName  
    $Path3 = [string]$user_old_tmp.Replace($domain2,$domain1)
    #удаляем начало (СN=имя пользователя,)  
    $UserCN="CN=" + $user_old.CN + "," 
    $Path3 = "LDAP://" + [string]$Path3.Replace([string]$UserCN,"")  
    #собственно перемешение
    $user.psbase.MoveTo([adsi]$Path3)  
     
    }
    #Конец 
    • Предложено в качестве ответа Alexander Donin 22 февраля 2009 г. 22:18
    • Изменено Alexander Donin 23 февраля 2009 г. 13:19
    • Помечено в качестве ответа Vasily GusevModerator 23 февраля 2009 г. 14:17
    22 февраля 2009 г. 22:17

Все ответы

  • Готово. Скрипт на PowerShell
    Коментарии по тексту.
    В качечтве теста, конечно, лучше поместить пару пользователей в отдельный контейнер и потренироваться на них.
    Если поможет - не забудьте пометить как ответ. Долго старался :-)

    #Заменить имя OU  
    $Ou="Migr_users"
    #Заменить имя нового домена  
    $Domain1="DC=domain_new,DC=ru"
    #Заменить имястарого домена  
    $Domain2="DC=domain_old,DC=ru"
    #Ищем пользователей в OU  
    $Path1 = "LDAP://OU=" + $OU + "," + $domain1  
    $Path2 = "LDAP://" + $domain2  
    $Search = New-Object DirectoryServices.DirectorySearcher([ADSI]$Path1)  
    $Search.filter = "(&(objectCategory=user)(cn=*))" 
    $Users = $Search.Findall()
    # для каждого  
    foreach ($User_n in $Users ){
    #находим соотв. в старом домене  
    $User = [ADSI]$User_n.Path  
    $USerName = [string]$User.Name  
    $Search2 = New-Object DirectoryServices.DirectorySearcher([ADSI]$Path2)  
    $Search2.filter = "(&(objectCategory=user)(cn=$USerName))" 
    $User_old = $Search2.FindOne()
    #меняем в пути имя домена  
    $User_old = [ADSI]$User_old.Path  
    $User_old_tmp = [string]$User_old.distinguishedName  
    $Path3 = [string]$user_old_tmp.Replace($domain2,$domain1)
    #удаляем начало (СN=имя пользователя,)  
    $UserCN="CN=" + $user_old.CN + "," 
    $Path3 = "LDAP://" + [string]$Path3.Replace([string]$UserCN,"")  
    #собственно перемешение
    $user.psbase.MoveTo([adsi]$Path3)  
     
    }
    #Конец 
    • Предложено в качестве ответа Alexander Donin 22 февраля 2009 г. 22:18
    • Изменено Alexander Donin 23 февраля 2009 г. 13:19
    • Помечено в качестве ответа Vasily GusevModerator 23 февраля 2009 г. 14:17
    22 февраля 2009 г. 22:17
  • Большое спасибо! Элегантно выглядит :) Скажите а он в рекурсивно ищет в указанном контейнере, или только в нем? 
    23 февраля 2009 г. 12:16
  •  Рекурсивно. И.. я его чуть поправил :-)
    23 февраля 2009 г. 13:20
  • >$Search.filter = "(&(objectCategory=user)(cn=*))"
    Я так понимаю если тут указать group от тож самое сделает и с группами?
    23 февраля 2009 г. 15:08
  • да. для составления зпросов можно использовать оснастку пользователи и компьютеры.
    new query \ custom query

    23 февраля 2009 г. 18:05
  • Большое спасибо!
    24 февраля 2009 г. 0:43