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
相关产品推荐
相关产品推荐

