You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell数组索引越界错误求助:脚本执行报错排查修复

PowerShell索引越界错误修复方案

错误信息

Vorgesetzer: 1
Index was outside the bounds of the array.
At line:87 char:20
+         for ($z=0; $z -le $lst_ma_vrg_grp[$i].count-1;$z++){
+                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], IndexOutOfRangeException
    + FullyQualifiedErrorId : System.IndexOutOfRangeException 

问题根源

  1. 数组结构定义错误:$lst_ma_vrg_grp的括号配对混乱,导致部分团队的子数组未正确闭合,数组层级错乱,索引访问时触发越界。
  2. 循环变量重名冲突:外层遍历团队的循环使用$i,内层查找主管AD路径的循环也使用$i,覆盖了外层变量值,导致后续循环的索引计算完全错误。
  3. 循环条件冗余易出错:使用$z -le $lst_ma_vrg_grp[$i].count-1的写法,当数组长度计算失误时极易触发越界,更安全的写法是直接用$z -lt $lst_ma_vrg_grp[$i].Count(数组索引从0开始,-lt直接匹配最大有效索引)。
  4. 字符串引号错误:$lst_title中存在多余引号(""Jobtitle1""),会导致字符串解析异常,间接影响后续数组访问逻辑。

修复后的完整代码

# 修正数组结构:每个团队作为独立子数组,括号正确配对
$lst_ma_vrg_grp = @(
    @("1", @("Department","Supervisor","Supervisor2","Supervisor3"), @("Department2","Supervisor","Supervisor2","Supervisor3","Supervisor4"), @("Department3","Supervisor","Supervisor2","Supervisor3","Supervisor4")),
    @("2", @("Department","Supervisor","Supervisor2","Supervisor3"), @("Department2","Supervisor","Supervisor2","Supervisor3","Supervisor4"), @("Department3","Supervisor","Supervisor2","Supervisor3","Supervisor4"), @("Department4","Supervisor","Supervisor2","Supervisor3","Supervisor4")),
    @("3", @("Department4","Supervisor","Supervisor2","Supervisor3","Supervisor4"), @("Department3","Supervisor","Supervisor2","Supervisor3","Supervisor4")),
    @("4", @("Department","Supervisor"))
)

# 主管AD路径列表
$lst_ma_path = @(
    @("Supervirsor name 1","CN=,OU=,OU=,OU=,DC=,DC=,DC="),
    @("Supervirsor name 2","CN=,OU=,OU=,OU=,DC=,DC=,DC="),
    @("Supervirsor name 3","CN=,OU=,OU=,OU=,DC=,DC=,DC=")
)

# 修正引号错误的部门职位列表
$lst_title = @(
    @("Department","Jobtitle1","AJobtitle2","Jobtitle3"),
    @("Department2","Jobtitle1","AJobtitle2","Jobtitle3","Jobtitle4","AJobtitle5","Jobtitle6"),
    @("Department3","Jobtitle1","AJobtitle2","Jobtitle3","Jobtitle4","AJobtitle5","Jobtitle6")
)
# 后续省略内容可自行补充

cls
$auswahlTeam = Read-Host -Prompt "Welches Team? (1,2,3,4)"
$externer = Read-Host -Prompt "Freelancer? (yes / no): "
$vorname = Read-Host -Prompt "Firstname"
$nachname = Read-Host -Prompt "Lastname"

# 遍历部门列表
for ($i=0; $i -lt $lst_title.Length; $i++) {
    Write-Host $i":" $lst_title[$i][0]
}
Write-Output "","----------------------------------"
$numabt = Read-Host -Prompt "Department"
$global:abteilung = $lst_title[$numabt][0]

# 遍历团队找对应部门的主管
for ($i=0; $i -lt $lst_ma_vrg_grp.Length; $i++) {
    if ($auswahlTeam -eq $lst_ma_vrg_grp[$i][0]) {
        # 修正循环条件,避免越界
        for ($z=0; $z -lt $lst_ma_vrg_grp[$i].Count; $z++) {
            # 跳过团队编号元素(索引0),避免无效匹配
            if ($z -eq 0) { continue }
            if ($abteilung -eq $lst_ma_vrg_grp[$i][$z][0]) {
                # 列出可选主管
                for ($c=1; $c -lt $lst_ma_vrg_grp[$i][$z].Count; $c++) {
                    Write-Host $c":" $lst_ma_vrg_grp[$i][$z][$c]
                }
                Write-Output "","----------------------------------"
                $vorgesetzer = Read-Host -Prompt "Vorgesetzer"
                $vorgesetzer = $lst_ma_vrg_grp[$i][$z][$vorgesetzer]
               
                # 更换循环变量为$j,避免覆盖外层$i
                for ($j=0; $j -lt $lst_ma_path.Length; $j++) {
                    if ($vorgesetzer -eq $lst_ma_path[$j][0]) {
                        $global:vorgesetzer = $lst_ma_path[$j][1]
                    }
                }
            }
        }
    }
}

额外优化说明

  • 添加if ($z -eq 0) { continue }跳过每个团队子数组的第一个元素(团队编号),避免无效的索引访问。
  • 统一使用-lt $array.Count作为循环条件,符合PowerShell数组索引的常规用法,从根源减少越界风险。
  • 数组定义时换行格式化,提升代码可读性,便于后续维护和修改。

内容的提问来源于stack exchange,提问作者ITGUYGER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:16:14