Powershell - 将自动递增值分配给包含 AD OU 的数组

Powershell - Assigning auto-incrementing values to array containing AD OUs

我有一段代码我已经苦苦思索了几天。我正在尝试根据我们的 AD OU 结构获取特许学校及其校园的列表。我浏览并获取章程名称,然后使用章程 OU 循环查看并获取校区列表。我想将它们放在一个具有自动递增值 ($i) 的数组中,因为当我获取此数据时,我想将其显示在菜单中,用户可以通过输入数字 select 校园。基本上每个校区都有自己的编号。

问题是,当它完成循环时,返回的唯一值是它循环通过的最后一个章程的值,none 其他章程的返回值。另一件奇怪的事情是数组中的键正在递增,我只是看不到它们!

# 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(这是它循环的最后一个章程)???

你只得到最后一个,因为你在你的 foreach Charter 循环中重新初始化 $sel,所以每次它通过一个新的 Charter 时,所有以前保存在 $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++
    }
}

$sel