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
我有一段代码我已经苦苦思索了几天。我正在尝试根据我们的 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