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

如何将Test-Connection与Test-NetConnection结果合并到同一输出表?

解决方法:合并Test-Connection和Test-NetConnection结果到同一输出表

要实现执行3次Test-Connection,并把它和Test-NetConnection的结果合并成统一的输出表,核心思路是提取两个命令的关键属性,组合成自定义的PowerShell对象。这样不管是成功还是失败的情况,都能统一格式输出。

下面是完整的实现代码,我帮你补全了端口测试的逻辑(假设你要测试的端口是443,你可以按需修改):

$computers = "pc1", "pc2"
$targetPort = 443 # 这里改成你实际要测试的端口
$results = @()

foreach ($pc in $computers) {
    # 执行3次ICMP探测,捕获异常情况
    $pingResult = try {
        Test-Connection $pc -Count 3 -ErrorAction Stop
    }
    catch {
        Write-Warning "->$pc<- 无法响应ICMP请求!"
        $null
    }

    # 提取Ping的关键指标:平均响应时间、丢包率
    if ($pingResult) {
        $avgResponse = [math]::Round(($pingResult.ResponseTime | Measure-Object -Average).Average, 2)
        $packetLoss = "0%"
    }
    else {
        $avgResponse = "无响应"
        $packetLoss = "100%"
    }

    # 执行端口连通性测试
    $portResult = try {
        Test-NetConnection $pc -Port $targetPort -ErrorAction Stop
    }
    catch {
        Write-Warning "->$pc<- 端口测试失败!"
        $null
    }

    # 提取端口测试的关键指标
    $portStatus = if ($portResult.TcpTestSucceeded) { "连接成功" } else { "连接失败" }
    $remoteAddress = $portResult.RemoteAddress ?? "无法解析地址"

    # 把两个测试的结果组合成自定义对象,存入结果数组
    $results += [PSCustomObject]@{
        计算机名称     = $pc
        平均响应时间(ms) = $avgResponse
        丢包率         = $packetLoss
        目标测试端口   = $targetPort
        端口连接状态   = $portStatus
        远程IP地址     = $remoteAddress
    }
}

# 输出最终的合并结果表
$results | Format-Table -AutoSize

代码说明:

  • 先定义测试目标列表和端口,用数组$results统一存储所有结果
  • 对每台计算机依次执行两项测试:
    1. 3次Test-Connection,捕获异常并给出警告,计算平均响应时间和丢包率
    2. Test-NetConnection端口测试,同样处理异常,提取连接状态和IP地址
    3. 将所有关键指标打包成自定义对象,保证输出格式统一
  • 最后用Format-Table输出整齐的结构化表格

你可以根据需求修改属性名称,或者添加更多字段(比如Ping的最小/最大响应时间),灵活性很高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:34:41