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

使用PSRemotingJob实现动态菜单时出现IndexOf错误咨询

错误原因

PowerShell 对管道返回结果有自动拆包逻辑:当筛选结果仅为1个时,变量会被赋值为单个对象而非数组。你遇到的报错正是因为$jobList在仅匹配到1个任务时,类型为PSRemotingJob单个对象,不存在数组专属的IndexOf()方法。

解决方法

方案1(最小改动):强制将返回结果转为数组

只需要修改$jobList的赋值语句,用@()包裹查询逻辑,无论返回结果数量多少,都会统一封装为数组类型,原有代码逻辑无需其他修改:

# 原行:$jobList = Get-Job | Where-Object {$_.State -ieq 'Completed'-and $_.Name -like "*-Repair"}
# 修改为:
$jobList = @(Get-Job | Where-Object {$_.State -ieq 'Completed'-and $_.Name -like "*-Repair"})

方案2(更稳妥的优化):手动维护序号计数器

不依赖IndexOf()方法,遍历的同时自己计数,逻辑更清晰,也不会出现类型不匹配的问题,完整修改后的代码如下:

Write-Host "`nCurrent Repair States:"
(Get-Job | Where-Object {$_.State -ieq 'Completed' -or $_.State -ieq 'Running' -and $_.Name -like "*-Repair"}) | Format-Table Name, State -HideTableHeaders

# 强制转数组,保证Count属性始终正确
$jobList = @(Get-Job | Where-Object {$_.State -ieq 'Completed'-and $_.Name -like "*-Repair"})
Write-Host "Selectable Completed SCCM Client Repairs:`n"

# 手动维护菜单序号
$menuNum = 1
Foreach ($menuItem in $jobList) {
    "  {0}.`t{1}" -f $menuNum, $menuItem.Name
    $menuNum++
}

$jobChoice = ''
while ([string]::IsNullOrWhiteSpace($jobChoice)) {
    $jobChoice = Read-Host "`nPlease choose the Machine by number"
    if ($jobChoice -inotin 1..$jobList.Count) {
        Write-Host
        Write-Host ('    Please try again ...') -Foreground Yellow
        Write-Host
                
        $jobChoice = ''
    }
}

# 选中的任务可通过下方代码获取
# $selectedRepairJob = $jobList[[int]$jobChoice - 1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:36:05