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

PowerShell导出CSV后Excel显示单行,如何改为每行一个应用?

解决方法

问题出在你把所有应用名称和版本拼接成了一个字符串,最终只生成了一个对象,所以导出CSV后只有一行。要让每个应用占一行,需要为每个应用单独创建一个自定义对象,再导出到CSV。

修改后的脚本如下:

$currentUsername = $env:USERNAME
$computerName = $env:COMPUTERNAME
$timeStamp = Get-Date -Format "ss-mm-HH-dd/MM/yyyy"
$desktopPath = [System.IO.Path]::Combine($env:USERPROFILE, 'Desktop')
$outputFileName = "${timeStamp}_${currentUsername}_${computerName}.csv"
$outputFile = [System.IO.Path]::Combine($desktopPath, $outputFileName)

# 获取已安装应用,过滤掉无显示名称的条目
$installedApps = Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" | 
                 Where-Object { $_.DisplayName -ne $null }

# 为每个应用创建独立的自定义对象
$appObjects = $installedApps | ForEach-Object {
    [PSCustomObject]@{
        "已安装应用" = $_.DisplayName
        "版本"       = $_.DisplayVersion
    }
}

# 导出到CSV,保留分号分隔符和UTF8编码
$appObjects | Export-Csv -Path $outputFile -NoTypeInformation -Delimiter ";" -Encoding UTF8

关键改动说明

  • 移除了原脚本中把所有应用拼接成字符串的逻辑,改为在ForEach-Object里为每个应用生成一个包含“已安装应用”和“版本”属性的自定义对象。
  • 导出时直接使用包含所有应用对象的数组$appObjects,Export-Csv会自动为每个对象生成一行数据。
  • 将应用名称和版本拆分到不同列,在Excel中查看更清晰;如果需要把名称和版本放在同一列,可调整自定义对象的属性。

可选:名称和版本同列的版本

如果仍希望应用名称和版本在同一列,修改ForEach-Object部分即可:

$appObjects = $installedApps | ForEach-Object {
    [PSCustomObject]@{
        "已安装应用" = "$($_.DisplayName) ($($_.DisplayVersion))"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:22:35