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

Powershell中嵌套Hashtable导出为指定格式CSV的问题

解决Powershell嵌套Hashtable导出CSV格式异常问题

错误原因

  • 第一种导出写法中Port属性的表达式直接返回DictionaryEntry枚举集合,CSV序列化时仅会输出类型名而非实际端口值
  • 第二种导出写法将IP作为PSObject的属性名,导出CSV时属性会转为表头,因此出现IP横向排列的问题
  • 未显式指定-NoTypeInformation参数时,Export-Csv会默认在头部输出类型标识行

修复后的完整代码

$filepath = "ip.csv"
$host_list = Import-Csv $filepath

$hash = @{}
$host_list | ForEach-Object{
    $IP = $_.IP
    $Port = $_.Port
    if(-not $hash.ContainsKey($IP)){
        $hash[$IP] = @{}
    }
    if(-not $hash[$IP].ContainsKey($Port)){
        $hash[$IP][$Port] = @{}
    }
}

# 构造导出的行集合
$exportRows = @()
$hash.GetEnumerator() | Sort-Object Name | ForEach-Object {
    $currentIP = $_.Key
    $portList = $_.Value.Keys | Sort-Object { [int]$_ } # 按端口数值排序
    $isFirstRow = $true
    foreach ($port in $portList) {
        $exportRows += [PSCustomObject]@{
            IP = if ($isFirstRow) { $currentIP } else { '' }
            Ports = $port
        }
        $isFirstRow = $false
    }
}

# 导出CSV
# PowerShell 5.1 可把Encoding改为 Default 适配Excel打开乱码问题
$exportRows | Export-Csv -Path "IPList.csv" -NoTypeInformation -Encoding UTF8

补充说明

CSV是纯文本格式,本身不存储对齐规则,你需要的IP左对齐、Ports居中效果,可以在Excel、WPS等表格工具打开文件后,手动设置列对齐属性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:57:05