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

PowerShell脚本添加Hostname列至CSV输出异常求助

问题解决:为CSV输出每行匹配对应Hostname、IP及在线状态

问题根源

之前的操作错误在于调用函数时,把$servers.RecordData(所有IP的数组)和$servers.Hostname(所有主机名的数组)一次性传入函数,没有建立IP与Hostname的一一对应关系——这会导致函数内的Hostname变量是整个数组,输出时每行都显示所有主机名;后续调整又没正确绑定对应关系,才引发了Computer列空的问题。

修正步骤

1. 调整Get-Pingables函数参数

修改函数,让它接收单个IP地址和对应的单个Hostname,而非整个数组:

function Get-Pingables {
    param(
        [Parameter(Mandatory=$true)]
        [string]$IPAddress,
        [Parameter(Mandatory=$true)]
        [string]$Hostname
    )

    $pingResult = Test-Connection -ComputerName $IPAddress -Count 1 -Quiet -ErrorAction SilentlyContinue
    [PSCustomObject]@{
        Hostname = $Hostname
        IPAddress = $IPAddress
        Online = $pingResult
    }
}

2. 遍历服务器列表,逐个调用函数

不再一次性传入整个数组,而是循环遍历$servers的每一项,把对应的RecordData(IP)和Hostname传给函数,确保每行数据一一对应:

# 假设$servers是包含Hostname和RecordData的集合(比如从DNS查询获取)
$results = foreach ($server in $servers) {
    Get-Pingables -IPAddress $server.RecordData -Hostname $server.Hostname
}

# 导出到CSV
$results | Export-Csv -Path ".\PingResults.csv" -NoTypeInformation

示例验证

输入示例($servers集合)

$servers = @(
    [PSCustomObject]@{Hostname = "Server01"; RecordData = "192.168.1.10"},
    [PSCustomObject]@{Hostname = "Server02"; RecordData = "192.168.1.11"},
    [PSCustomObject]@{Hostname = "Server03"; RecordData = "192.168.1.12"}
)

输出CSV内容(正确格式)

"Hostname","IPAddress","Online"
"Server01","192.168.1.10","True"
"Server02","192.168.1.11","False"
"Server03","192.168.1.12","True"

常见错误规避

  • 禁止直接传入数组参数:如果函数接收数组类型参数,会导致单条输出绑定整个数组值,必须确保每次处理单个IP-Hostname对。
  • 必须遍历集合每一项:使用foreach ($item in $collection)而非批量传递,才能保证IP和Hostname的关联准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:35:09