2014-09-24 7 views
0

Я пытаюсь довольно вверх мой код немного (и в результате узнать некоторые вещи)Powershell массива или объекты

У меня есть довольно прямо вперед проблема, которую я хотел бы решить с помощью цикла Еогеаспа

, но я не знаю достаточно о PowerShell еще не знаю, чтобы выполнить его правильно

у меня есть этот текст

$gr0 = get-adgroup -Properties * -Filter "(Name -eq 'Division 0')" -SearchBase "OU=Groups,DC=solutions,DC=local"; 
$gr1 = get-adgroup -Properties * -Filter "(Name -eq 'Division 1')" -SearchBase "OU=Groups,DC=solutions,DC=local"; 
$gr2 = get-adgroup -Properties * -Filter "(Name -eq 'Division 2')" -SearchBase "OU=Groups,DC=solutions,DC=local"; 

Я тогда идти на бегу цикл по результатам каждой группы ш Ith идентичный код

, что я пытаюсь сделать, это

$ группы [] = $ gr0 $ gr1 $ gr2

Еогеасп (группа в группах) {сделать что-то;}

Но Я могу показаться, чтобы найти хорошие примеры

Любая помощь на всех были бы большими

Благодаря

ответ

1

Вы ищете синтаксис foreach в Powershell? Вот пример:

foreach ($group in $groups) { 
    do something; 
} 

EDIT: Вот способ выполнить свои действия в цикле:

$groups = @(); 
for($i=0; $i<=2; $i++) { 
    $groups += get-adgroup -Properties * -Filter "(Name -eq 'Division $i')" -SearchBase "OU=Groups,DC=solutions,DC=local"; 
} 

Ссылка:

+0

на самом деле я ищу, как загрузить массив правильно, поэтому foreach будет шагать на каждый – Crash893

+0

@ Crash893: Проверьте мое редактирование. – Neolisk

1

Я думаю, вы хотите сгруппировать свой Результаты вместе, как этот

$groups = @(); 
$groups += $gr0 
$groups += $gr1 
$groups += $gr2 

Вы, скорее всего, есть и другие причины делать это, как вы делаете, но вы также можете обновить -Filter так что все возвращается в одном объекте.

$groups = get-adgroup -Properties * -Filter "(Name -like 'Division*')" -SearchBase "OU=Groups,DC=solutions,DC=local" | Where-Object{$_.Name -match "Division [012]"} 

-Filter не поддерживает оператора состязания. Итак, возьмите все те, которые начинаются с «Подразделения» и протрубите их в Where-Object, чтобы получить те, которые являются только разделом 0,1,2. Вы можете просто опустить предложение Where в зависимости от ваших потребностей.

1

Возможно, это?

foreach ($groupname in 'Division 0','Division 1','Division 2') 
{ 
    $grp = get-adgroup -Properties * -Filter "Name -eq '$groupname'" -SearchBase "OU=Groups,DC=solutions,DC=local" 
    do stuff with $grp 
} 

Для Мэтта:

$groupnames = 'Division 0','Division 1','Division 2' 
$NameFilters = $groupnames -replace '^','(Name=' -replace '$',')' 
$Filter = "'(|$NameFilters)'" 

foreach ($grp in get-adgroup -Properties * -LDAPFilter $filter -SearchBase "OU=Groups,DC=solutions,DC=local") 
{ 
    do something with $grp... 
    } 

$ фильтр будет OR-нут фильтр LDAP каждого из имен группы:

'(|(Name=Division 0) (Name=Division 1) (Name=Division 2))' 
+0

Я собирался отредактировать свой пост с этим. Я думаю, что один фильтр будет лучше. Однако, если нет никакой связи между группами, это намного лучше. – Matt

+0

Вышел пример создания фильтра из коллекции произвольных имен. – mjolinor

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