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

PowerShell自定义对象导出CSV显示System.Object问题解决

解决PowerShell脚本导出CSV显示System.Object的问题

嘿,我懂你碰到的这个糟心问题——脚本在PowerShell控制台里输出明明正常,可一导出成CSV就全是System.Object。这其实是因为你返回的对象里藏着嵌套的复杂属性,CSV格式只能处理扁平的键值对,没法解析嵌套对象,所以就直接显示对象的类型名了。

我帮你把代码改了改,把解析结果拆成了完全扁平的属性,这样导出CSV就正常了:

function Resolve-IPDNS {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string[]]$IPDNS,
        [string]$DNSServer = "1.1.1.1"
    )

    Process {
        foreach ($addrs in $IPDNS ) {
            # 判断输入是IP还是域名
            if ($addrs -as [ipaddress]) {
                # 反向解析IP
                $resolveResult = Resolve-DnsName -Name $addrs -Server $DNSServer -Type PTR -ErrorAction SilentlyContinue
                if ($resolveResult) {
                    # 构造扁平输出对象
                    [PSCustomObject]@{
                        InputAddress = $addrs
                        ResolvedName = $resolveResult.NameHost
                        DNSServerUsed = $DNSServer
                        RecordType   = "PTR"
                    }
                }
                else {
                    # 解析失败时返回明确信息
                    [PSCustomObject]@{
                        InputAddress = $addrs
                        ResolvedName = "解析失败"
                        DNSServerUsed = $DNSServer
                        RecordType   = "PTR"
                    }
                }
            }
            else {
                # 正向解析域名
                $resolveResult = Resolve-DnsName -Name $addrs -Server $DNSServer -Type A -ErrorAction SilentlyContinue
                if ($resolveResult) {
                    # 遍历所有A记录(一个域名可能对应多个IP)
                    foreach ($record in $resolveResult) {
                        [PSCustomObject]@{
                            InputAddress = $addrs
                            ResolvedIP   = $record.IPAddress
                            DNSServerUsed = $DNSServer
                            RecordType   = "A"
                        }
                    }
                }
                else {
                    [PSCustomObject]@{
                        InputAddress = $addrs
                        ResolvedIP   = "解析失败"
                        DNSServerUsed = $DNSServer
                        RecordType   = "A"
                    }
                }
            }
        }
    }
}

关键改动说明:

  • 不再直接返回Resolve-DnsName的原始结果(里面有嵌套属性),而是用[PSCustomObject]构造完全扁平的自定义对象,每个属性都是简单字符串/值类型
  • 处理了一个域名对应多个IP的情况,会逐条输出每个解析结果
  • 增加了解析失败的友好提示,避免输出空值

使用示例:

运行脚本后,用以下命令导出CSV:

Resolve-IPDNS -IPDNS "8.8.8.8","google.com","invalid.example" | Export-Csv -Path "DNS解析结果.csv" -NoTypeInformation -Encoding UTF8

这样导出的CSV里就不会再出现System.Object,而是清晰的解析内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:53:57