我有一段代码,我已经花了几天的时间在脑子里。我正试图根据我们的AD OU结构来获取特许学校及其校园的名单。我翻阅并获取特许的名称,然后使用特许OU,我骑自行车和抓取校园的名单。我希望将它们放在一个具有自动递增值($i)的数组中,因为当我获取这些数据时,我希望在一个菜单中显示它,用户可以通过输入一个数字来选择校园。基本上每个校园都有自己的号码。
问题是,当它完成循环时,唯一返回的值是它循环通过的最后一个宪章中的值,其他值都没有继续执行。另一件奇怪的事情是,数组中的键正在很好地递增,我只是看不见它们!
# Get list of Charters in AD
$charters = Get-ADOrganizationalUnit -LDAPFilter '(name=*)' -SearchBase 'OU=Campuses,DC=INTELLATEK,DC=LOCAL' -SearchScope OneLevel | Select-Object Name, DistinguishedName | Where-Object {$_.name -ne 'All Campus'}
$i = 1
ForEach ($charter in $charters) {
# Get list of list of campuses for that charter
$campuses = Get-ADOrganizationalUnit -LDAPFilter '(name=*)' -SearchBase $charter.DistinguishedName -SearchScope OneLevel | Select-Object Name, DistinguishedName, ObjectGUID
$sel = @{}
ForEach ($campus in $campuses) {
# $i
# $campus.Name
$sel[$i] = @{}
$sel[$i]["charter"] = $charter
$sel[$i]["campus"] = $campus.Name
$sel[$i]["distinguishedname"] = $campus.DistinguishedName
$sel[$i]["objectguid"] = $campus.ObjectGUID
$i++
}
}
$sel$sel输出如下:

为什么它只显示11-16 (这是它循环通过的最后一个宪章)?
发布于 2015-02-02 22:17:09
你只会得到最后一个,因为你在你的foreach宪章循环中重新初始化$sel,所以每次它通过一个新的宪章时,保存在$sel中的所有以前的信息都会被删除。你需要把它放到循环之外:
i = 1
$sel = @{}
ForEach ($charter in $charters) {
# Get list of list of campuses for that charter
$campuses = Get-ADOrganizationalUnit -LDAPFilter '(name=*)' -SearchBase $charter.DistinguishedName -SearchScope OneLevel | Select-Object Name, DistinguishedName, ObjectGUID
ForEach ($campus in $campuses) {
# $i
# $campus.Name
$sel[$i] = @{}
$sel[$i]["charter"] = $charter
$sel[$i]["campus"] = $campus.Name
$sel[$i]["distinguishedname"] = $campus.DistinguishedName
$sel[$i]["objectguid"] = $campus.ObjectGUID
$i++
}
}
$selhttps://stackoverflow.com/questions/28287616
复制相似问题