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

PowerShell多数组生成静态自定义HTML表格解决应用更新校验错位问题

批量更新结果校验HTML表格错位问题修复方案

当前代码的错位问题根源是三个数组独立维护,删除操作如果出现要移除的项不存在、或者某个版本变量为空的情况,会导致三个数组长度不一致,索引对应关系错乱。修复核心逻辑是把软件的三个属性绑定为单个对象统一管理,避免三个数组独立操作导致对应关系错乱,同时统一处理空值显示为空白,不会打乱表格结构。

修改后完整代码

Function Get-Verification{
    $Header = '<style>
        body {
            background-color: Gainsboro;
            font-family:      "Calibri";
        }

        table {
            border-width:     1px;
            border-style:     solid;
            border-color:     black;
            border-collapse:  collapse;
            width:            75%;
        }

        th {
            border-width:     1px;
            padding:          5px;
            border-style:     solid;
            border-color:     black;
            background-color: #98C6F3;
        }

        td {
            border-width:     1px;
            padding:          5px;
            border-style:     solid;
            border-color:     black;
            background-color: White;
        }

        tr {
            text-align:       left;
        }
    </style>'

    # 统一存储软件所有属性,天然保证三个字段对应关系不会错乱
    $softwareList = @(
        [PSCustomObject]@{
            "应用名称" = "Notepad++"
            "预期版本" = $NotepadVersion
            "已安装版本" = $NotepadExe
        },
        [PSCustomObject]@{
            "应用名称" = "PowerShell7"
            "预期版本" = $PowerShellVersion
            "已安装版本" = $PowerShellExe
        },
        [PSCustomObject]@{
            "应用名称" = "RACTools"
            "预期版本" = $RACToolsVersion
            "已安装版本" = $RACToolsExe
        },
        [PSCustomObject]@{
            "应用名称" = "Rufus"
            "预期版本" = $RufusVersion
            "已安装版本" = $RufusVersion
        },
        [PSCustomObject]@{
            "应用名称" = "RuTTY"
            "预期版本" = $RuTTYVersion
            "已安装版本" = $RuTTYExe
        },
        [PSCustomObject]@{
            "应用名称" = "WinSCP"
            "预期版本" = $WinSCPVersion
            "已安装版本" = $WinSCPExe
        },
        [PSCustomObject]@{
            "应用名称" = "WireShark"
            "预期版本" = $WireSharkVersion
            "已安装版本" = $WireSharkExe
        },
        [PSCustomObject]@{
            "应用名称" = "Microsoft Edge"
            "预期版本" = $MSEdgeVersion
            "已安装版本" = $MSEdgeExe
        },
        [PSCustomObject]@{
            "应用名称" = "Chrome Portable"
            "预期版本" = $ChromeVersion
            "已安装版本" = $ChromeVersion
        },
        [PSCustomObject]@{
            "应用名称" = "FireFox Portable"
            "预期版本" = $FireFoxVersion
            "已安装版本" = $FireFoxVersion
        },
        [PSCustomObject]@{
            "应用名称" = "NetBanner"
            "预期版本" = $NetBannerVersion
            "已安装版本" = $NetBannerExe
        },
        [PSCustomObject]@{
            "应用名称" = "OVFTool"
            "预期版本" = $OVFToolMsiVersion
            "已安装版本" = $OVFToolExe
        },
        [PSCustomObject]@{
            "应用名称" = "PowerCLI"
            "预期版本" = $PowerCLIVersion
            "已安装版本" = $PowerCLIModule
        },
        [PSCustomObject]@{
            "应用名称" = "VMRC"
            "预期版本" = $VMRCVersion
            "已安装版本" = $VMRCExe
        },
        [PSCustomObject]@{
            "应用名称" = "Workstation"
            "预期版本" = $WorkstationVersion
            "已安装版本" = $WorkstationExe
        },
        [PSCustomObject]@{
            "应用名称" = "Axway"
            "预期版本" = $AxwayVersion
            "已安装版本" = $AxwayExe
        },
        [PSCustomObject]@{
            "应用名称" = "InstallRoot"
            "预期版本" = $InstallRootMsi
            "已安装版本" = $InstallRootExe
        },
        [PSCustomObject]@{
            "应用名称" = "ActivClient"
            "预期版本" = $ACVersion
            "已安装版本" = $ACExe
        },
        [PSCustomObject]@{
            "应用名称" = "90Meter"
            "预期版本" = $90MVersion
            "已安装版本" = $90MExe
        },
        [PSCustomObject]@{
            "应用名称" = "Microsoft Office"
            "预期版本" = $Office
            "已安装版本" = $Office
        }
    )

    # 根据环境过滤软件,直接操作整个对象,不会出现字段错位
    if($Class -eq "NIPR"){
        $softwareList = $softwareList | Where-Object {$_."应用名称" -ne "90Meter"}
    }
    if($Class -eq "SIPR"){
        $softwareList = $softwareList | Where-Object {$_."应用名称" -ne "ActivClient"}
    }

    # 空值统一替换为空白字符串,保证表格结构整齐
    $softwareList | ForEach-Object {
        if([string]::IsNullOrEmpty($_."预期版本")){$_."预期版本" = ""}
        if([string]::IsNullOrEmpty($_."已安装版本")){$_."已安装版本" = ""}
    }

    # 直接生成HTML,不需要手动遍历索引
    $softwareList | ConvertTo-Html -Head $Header -PostContent "报告生成时间:$Date" | Out-File "App_Verification.htm"
    Invoke-Item "App_Verification.htm"
    exit
}

修改后就算某个软件的版本信息拉取失败、或者安装更新失败,对应版本字段只会显示空白,不会出现整行错位、字段串位的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:57:04