Powershell数组或对象

时间:2014-09-24 14:54:13

标签: powershell

我试图稍微提高我的代码(并因此学习一些东西)

我有一个非常直接的问题,我想用foreach循环来解决

但是我还没有充分了解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";

然后我继续使用相同代码

对每个组的结果进行循环

我想做的是

$ groups [] = $ gr0 $ gr1 $ gr2

foreach(群组){做某事;}

但我似乎能找到任何好的例子

任何帮助都会很棒

由于

3 个答案:

答案 0 :(得分:1)

您是否在Powershell中寻找foreach的语法?这是一个例子:

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

编辑:以下是循环执行操作的方法:

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

参考:

答案 1 :(得分: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不支持匹配运算符。所以抓住所有以“Division”开头的那些并将它们导入Where-Object以得到那些只是分区0,1,2的那些。根据您的需要,您可以完全省略Where条款。

答案 2 :(得分: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...
  }

$ filter将是每个组名的OR&lt; LDAP过滤器:

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