2016-05-10 2 views
-1

Этот скрипт работает без ошибок, но проблема в том, что при обнаружении нескольких групп в базе поиска скрипт добавит всех пользователей из всех групп в целевые группы перекрестного леса.Powershell Добавление пользователей в группы для пересечения лесных групп

Так, например:

ForestAGroup1 = содержит 2 пользователей

ForestAGroup2 = содержит 2 пользователей

:: запускает скрипт ::

теперь ...

ForestBGroup1 = содержит 4 пользователей

ForestBG roup2 = содержит 4 пользователей

В ForestBGroup1/2 должны быть одинаковые пользователи, такие как ForestAGroup1/2.

Вот скрипт для справки:

$creds = Get-Credential 
$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domainA,DC=com" | export-csv c:\temp\test.csv 
$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domainA,DC=com" 
Foreach($G In $Groups) 
{ 
    #Display group members and group name 
    Write-Host $G.Name 
    Write-Host "-------------" 
    $G.Members 

    #Add members to domainB group 
    $domainGMembers = import-csv C:\temp\test.csv | ForEach-Object -Process {Get-ADGroupMember -Identity $_.CN} | Select-Object samaccountname | export-csv c:\temp\gmembers.csv 

    $domainDNUser = import-csv C:\temp\gmembers.csv | ForEach-Object -Process {Get-ADUser $_.samaccountname -Server "domainA.com" -properties:Distinguishedname} 

    import-csv C:\temp\gmembers.csv | ForEach-Object -Process {Add-ADGroupMember -Server "domainB.com" -Identity $G.Name -Members $domainDNUser -Credential $creds -Verbose} 

} 
+1

Вы всегда должны чистить свой пример для получения конфиденциальной информации. Помните, что Contoso.com - отличная компания. Данные теперь живут в истории .. –

+0

Ваш вопрос непонятен. Вы говорите, что хотите иметь те же элементы в «ForestBGroup1», что и в «ForestAGroup1» («The ForestBGroup1/2 должен содержать одинаковых пользователей, таких как ForestAGroup1/2.»), Но ваш пример показывает 2 члена в A1 и 4 в B1. Наличие всех членов во всех группах звучит не так, поэтому мой ответ будет соответствовать только A1 с B1 и т. Д. Если вы действительно хотите, чтобы все пользователи в каждой группе B, вы должны добавить их в одну группу B и добавить это к другие B-группы. Вы не хотите поддерживать 10 групп с одинаковыми членами. –

+0

Мой пример чист от конфиденциальной информации, от того, что я вижу? Да, ForestAGroups1/2 должен совпадать с ForestBGroups1/2, но вместо этого он объединяет всех пользователей в целевые группы ForestB. – Kyle

ответ

0

Что ты делаешь?

  • Вы экспорт в CSV-файл, но все-таки попытаться сохранить его в переменные
  • Ищут дважды
  • Вы добавляете все член из всех групп в TEST -ou к каждой группе в domainB
  • Вы тратите время сохранения и чтения данных, которые у вас уже есть в памяти
  • Поиск объекта-пользователя для получения SamAccountName, когда у вас уже есть что-то в десять раз лучше, DN. Затем вы используете это SamAccountName, чтобы найти DN.

Попробуйте это (непроверенные):

$creds = Get-Credential 
$Groups = Get-ADGroup -Properties Members -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domain,DC=com" 
Foreach($G In $Groups) 
{ 
    #Display group members and group name 
    Write-Host $G.Name 
    Write-Host "-------------" 
    $G.Members 

    #Add members to domainB group 
    $G.Members | 
    Get-ADUser -Server fairfieldmfg.com | 
    ForEach-Object { Add-ADGroupMember -Server "domainB.com" -Identity $G.Name -Members $_ -Credential $creds -Verbose } 
} 

Я использовал Еогеасп петлю для запуска Add-ADGroupMember, потому что, как правило, терпит неудачу в середине группы членов, если он находит на уже является членом , но если мы добавим их по одному, вы обходите это (или можете выполнить поиск и исключить те, которые уже есть в группе).

Возможно, вы захотите добавить -ErrorAction SilentlyContinue в Add-ADGroupMember, чтобы игнорировать эти ошибки, когда знаете, что скрипт работает так, как должен.

+0

Вам не хватает того, что вы должны искать каждого пользователя AD из исходного домена DomainA. Потому что ваше решение устраняет ошибки: «Невозможно найти объект с личностью: blah blah» Мое решение может выглядеть неуклюжим, но по крайней мере на данный момент оно не выдает ошибку и удается захватить правильные объекты. Сейчас мне просто сложно добавить их в правильные группы. – Kyle

+0

Добавлено: 'Get-ADUser $ G.Members -Server fairfieldmfg.com -properties: Distinguishedname | ForEach-Object {Add-ADGroupMember -Server "dom02.net" -Identity $ G.Name -Members $ _ -Credential $ creds -Verbose} 'Но это также не работает с' Get-ADUser: Can not convert 'Microsoft.ActiveDirectory.Management .ADPropertyValueCollection 'для типа «Microsoft.ActiveDirectory.Management.ADUser», требуемого параметром «Identity». Указанный метод не поддерживается. ' – Kyle

+0

Мне нужна настоящая ошибка (отключите отдельные слова, а не все сообщение). Код должен быть добавлен в вопрос, а не в комментарии. Что касается скрипта. Я не сталкиваюсь с проблемой .. Группы - это domainA, члены - domainA ... Вы принимаете члены домена DomainA из группы, выполняете поиск в domainA для имени samaccount (отходы), используйте это для поиска DN в domaina (который вы уже было), а затем вы добавляете в группу domainb. Единственная причина, по которой я вижу, что пропускаю два «получить имя пользователя samaccountname, а затем DN», является проблемой, если ForestAGroup1 содержит пользователей DomainB. Есть ли? –

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