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

PowerShell中PSCustomObject数组Connected列异常,嵌套判断失效求助

解决PSCustomObject中Connected列逻辑错误的问题

常见问题排查与修正

  • 先确认进程检测逻辑是否准确:Get-Process搭配-ErrorAction SilentlyContinue可避免报错,但要确保判断进程存在的条件无遗漏。
  • 嵌套if/else结构易因分支顺序或语法疏漏导致逻辑出错,改用switch语句能让逻辑更直观清晰。

修正后的代码示例

$processList = @("notepad.exe", "TEST.exe", "chrome.exe")
$outputArray = foreach ($procName in $processList) {
    # 移除.exe后缀,Get-Process的Name参数无需后缀即可识别进程
    $targetProc = Get-Process -Name $procName.Replace(".exe", "") -ErrorAction SilentlyContinue
    [PSCustomObject]@{
        ProcessName = $procName
        Connected   = switch ($true) {
            # 进程不存在的场景
            (-not $targetProc) { "Not Running" }
            # 进程存在但未响应的场景
            (-not $targetProc.Responding) { "No" }
            # 进程正常运行且响应的场景
            default { "Yes" }
        }
    }
}

# 格式化输出查看结果
$outputArray | Format-Table -AutoSize

关键改进点

  • 用switch替代嵌套if/else,逻辑分支一目了然,大幅降低出错概率。
  • 统一处理进程名后缀,避免因.exe导致Get-Process无法匹配目标进程。
  • 通过foreach循环直接输出构建数组,比+=拼接数组效率更高,处理大量进程时优势更明显。

测试后,不存在的TEST.exe会正确显示Not Running,未响应的进程显示No,正常运行的进程显示Yes,完全符合预期逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:55:58