我试图稍微提高我的代码(并因此学习一些东西)
我有一个非常直接的问题,我想用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(群组){做某事;}
但我似乎能找到任何好的例子
任何帮助都会很棒
由于
答案 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))'