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

PowerShell查询服务器Chrome版本导出CSV异常问题排查

问题

我需要批量查询多台服务器的以下信息:

  • 是否已安装Chrome
  • 已安装的Chrome版本

通过查询c:\program files (x86)\Google\Chrome\Application目录获取版本文件夹,部分服务器仅有1个版本文件夹,多数有2个及以上。

屏幕输出结果正常,但导出为CSV文件时,已安装Chrome的服务器版本列显示为System.Object[],未安装的则显示正常。请问问题出在哪里?

相关代码

$list = [System.Collections.Generic.List[PSObject]]@()
foreach($server in Get-Content d:\chkchromever\servers.txt) { 
If(Test-Path \\$server\c$\Program Files (x86)\Google\Chrome\Application) {
# Chrome Path Exists-
$VersionNumber=(Get-ChildItem -Path \\$server\c$\Program Files (x86)\Google\Chrome\Application|where {$_.name -match "\d\d.*"}).Name 
Write-Host $server','$VersionNumber
$obj= [pscustomobject]@{
Server=$server
Version=$VersionNumber
}
$List.Add($obj);
$list | Export-Csv -Path "D:\chkchromever\output.csv "
}
else {
Write-Host $server "does not have Chrome"
$obj= [pscustomobject]@{
Server=$server
Version= "Not Installed"
}
$List.Add($obj);
$list | Export-Csv -Path "D:\chkchromever\output.csv"
}
}

执行现象

PowerShell控制台输出

PS C:\Windows\system32> D:\chkchromever\chkversion2.ps1
Server1,76.0.3809.132 86.0.4240.198
Server2,106.0.5249.103 106.0.5249.119
Server3 does not have Chrome
Server4 does not have Chrome

CSV文件内容

#TYPE System.Management.Automation.PSCustomObject
Server Version
Server1 System.Object[]
server2 System.Object[]
server3 Not Installed

原因与解决方法

问题原因

$VersionNumber是数组对象(当存在多个版本文件夹时),CSV无法直接序列化数组类型,因此显示System.Object[]。控制台输出时PowerShell会自动将数组展开为空格分隔的字符串,但Export-Csv不会做这个处理。

另外,循环内重复执行Export-Csv属于冗余操作,会多次覆盖文件,影响效率。

修正方案

  1. 将数组类型的版本号转换为字符串(用逗号/空格分隔)
  2. 把CSV导出操作移到循环结束后,一次性完成写入

修正后的代码

$list = [System.Collections.Generic.List[PSObject]]@()
$servers = Get-Content d:\chkchromever\servers.txt

foreach($server in $servers) { 
    $chromePath = "\\$server\c$\Program Files (x86)\Google\Chrome\Application"
    if(Test-Path $chromePath) {
        # 获取版本文件夹名称并转为逗号分隔的字符串
        $VersionNumber = (Get-ChildItem -Path $chromePath | Where-Object {$_.Name -match "\d{2,}.*"}).Name -join ", "
        Write-Host "$server, $VersionNumber"
        $obj = [pscustomobject]@{
            Server = $server
            Version = $VersionNumber
        }
        $List.Add($obj)
    }
    else {
        Write-Host "$server does not have Chrome"
        $obj = [pscustomobject]@{
            Server = $server
            Version = "Not Installed"
        }
        $List.Add($obj)
    }
}

# 循环结束后一次性导出CSV,添加-NoTypeInformation去除冗余类型行
$list | Export-Csv -Path "D:\chkchromever\output.csv" -NoTypeInformation -Encoding UTF8

关键优化说明

  • 使用-join ", "将版本数组转为字符串,CSV中会显示为76.0.3809.132, 86.0.4240.198格式
  • 添加-NoTypeInformation参数去掉CSV开头的#TYPE行,输出更简洁
  • 导出操作移到循环外,避免重复写入文件,提升执行效率
  • 用变量存储$chromePath,减少重复代码,提高可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:25:23