2014-12-02 6 views
1

У меня есть сценарий, используемый для управления членством в группах, но я сталкиваюсь с проблемой, когда дело касается поиска нескольких подразделений.Powershell Combine Get-ADUser Результаты

В настоящее время в рамках сценария, я следующий код, используемый для запроса AD:

$Users = Get-ADUser -LDAPFilter $LDAPString -SearchBase $SearchOU 

(...) 

Foreach ($User in $Users) 
{ 
    If ($User.distinguishedName -notin $Members.distinguishedName) 
    { 
     Add-ADGroupMember -Identity $GroupDN -Members $User.distinguishedName -Server $DomainController 
    } 
} 

До сих пор, я попытался следующие, где $ OU является массивом OU, но я в конечном итоге просто первый результат.

Foreach ($OU in $SearchOUs) 
{ 
    $Users += Get-ADUser -LDAPFilter $LDAPString -SearchBase $OU 
} 

Есть простой способ объединить получившиеся хэш-таблицы или это лучше просто создать новый хэш-таблицу и добавить результаты к этому?

ответ

2

Ваша вторая попытка близка. Попробуйте добавить $Users = @() до Foreach. Оператор += перегружен, поэтому он может выбрать неправильную операцию. Инициализация переменной до пустого массива дает понять, что вы хотите:

$Users = @() 
Foreach ($OU in $SearchOUs) 
{ 
    $Users += Get-ADUser -LDAPFilter $LDAPString -SearchBase $OU 
} 

Кроме того, это массив, а не хэш-таблица. Это разные.

+0

Вы гений! Кажется, мое удержание было связано с предположением, что это хеш-таблица, а не массив. Я попробовал что-то очень похожее, добавив '$ Users = @ {}'. В любом случае, ваше предложение выиграло битву. Большое спасибо! –

+0

@JasonW Если вам нужно проверить, что такое группа, вы всегда можете использовать '$ x -is [hashtable]' или '$ x -is [array]' где '$ x' - это то, что вы работаете с. –

+0

Ну эй, посмотри на этот маленький самородка знаний ... Я определенно буду держать это в своей панели инструментов. Благодаря! –