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

PowerShell哈希表数组输出异常:仅返回最后一台计算机补丁信息求助

PowerShell批量查询补丁状态脚本修正方案

问题根源

你遇到的哈希表数组仅返回最后一台计算机信息的问题,核心原因是循环里重复复用同一个哈希表对象。PowerShell中哈希表是引用类型,数组存储的是对象引用,所有元素指向同一个哈希表,最终只会保留最后一次循环的修改结果。

修正后的脚本

# 目标计算机列表
$computers = @("COMP1", "COMP2", "COMP3", "COMP4")
# 需要查询的补丁编号
$targetKBs = @("KB5031043", "KB5031419")

# 初始化结果存储数组
$results = @()

foreach ($pc in $computers) {
    # 每次循环新建有序哈希表,避免引用复用
    $pcResult = [ordered]@{
        "计算机名称" = $pc
        "连接状态"   = "未连接"
        "WinRM状态"  = "未检测"
    }

    # 检测WinRM可用性
    $winrmOK = Test-WSMan -ComputerName $pc -ErrorAction SilentlyContinue
    if ($winrmOK) {
        $pcResult["WinRM状态"] = "正常"
        try {
            # 建立远程会话
            $session = New-PSSession -ComputerName $pc -ErrorAction Stop
            $pcResult["连接状态"] = "已连接"

            # 获取已安装补丁列表
            $installedKBs = Get-HotFix -ComputerName $pc -ErrorAction Stop | Select-Object -ExpandProperty HotFixID

            # 逐个检查目标补丁状态
            foreach ($kb in $targetKBs) {
                $pcResult[$kb] = if ($installedKBs -contains $kb) { "已安装" } else { "未安装" }
            }

            # 关闭远程会话
            Remove-PSSession $session
        } catch {
            $pcResult["连接状态"] = "连接失败:$($_.Exception.Message)"
            # 补丁状态设为无法查询
            foreach ($kb in $targetKBs) {
                $pcResult[$kb] = "无法查询"
            }
        }
    } else {
        $pcResult["WinRM状态"] = "异常"
        # 补丁状态设为无法查询
        foreach ($kb in $targetKBs) {
            $pcResult[$kb] = "无法查询"
        }
    }

    # 转换为PS自定义对象后加入数组,确保列完整显示
    $results += [PSCustomObject]$pcResult
}

# 输出格式化表格
$results | Format-Table -AutoSize

关键修正点

  1. 每次循环新建哈希表:用[ordered]@{}在循环内创建独立对象,避免后续循环覆盖之前的结果。
  2. 转换为PSCustomObject:哈希表直接存入数组时,PowerShell会根据第一个元素属性生成列,转换为自定义对象能确保所有属性被识别,输出完整列。
  3. 补全所有属性:不管连接成功与否,都为每个补丁状态赋值,确保所有结果对象属性一致,表格能显示全部补丁列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:32:44