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

使用PSPing监测自定义RDP端口,如何输出带时间戳的完整日志

问题根源说明

你原有代码的问题出在这几个地方:

  • Write-Host 的输出仅会打印到控制台,不会进入管道被 Out-File 捕获,所以时间戳不会写入日志
  • 你每次调用 Out-File 用的是默认覆盖模式,每次循环都会清空之前的日志内容,导致只有最后一次测试结果
  • PSPing的输出是多行文本,直接写入没有结构化,后续排查高延迟/丢包会很麻烦
修正后可用代码
# 基础配置
$Server = "SERVER01"
$PSPingPath = "C:\TEMP\PSTools\psping64.exe"
$LogPath = "C:\TEMP\Logs\$Server.csv"
$TestPort = 1234
$TestDurationHours = 7
$TestIntervalSeconds = 5

# 预创建日志目录(不存在的话)
$LogDir = Split-Path $LogPath -Parent
if (-not (Test-Path $LogDir)) {
    New-Item -ItemType Directory -Path $LogDir -Force | Out-Null
}

# 写入CSV表头(第一次运行时加,已存在就跳过)
if (-not (Test-Path $LogPath)) {
    "测试时间,目标地址,端口,连通状态,延迟(ms)" | Out-File -FilePath $LogPath -Encoding UTF8
}

Function Test-PortPing {
    param(
        [string]$Target,
        [int]$Port
    )
    $TestTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    # 调用psping,-n 1表示只测1次,-q表示静默输出只给结果
    $pspingResult = & $PSPingPath -n 1 -q "$Target`:$Port" 2>&1
    
    # 解析结果,判断连通性和延迟
    if ($pspingResult -match "Connect to.*failed") {
        $Status = "不通"
        $Latency = "0"
    } elseif ($pspingResult -match "Reply from.*time=(\d+\.?\d*)ms") {
        $Status = "连通"
        $Latency = $matches[1]
    } else {
        $Status = "异常"
        $Latency = "0"
    }

    # 控制台输出方便实时看
    Write-Host "$TestTime | $Target`:$Port | $Status | $Latency ms" -ForegroundColor $(if($Status -eq "连通"){"Green"}else{"Red"})
    # 返回结构化结果用于写日志
    return "$TestTime,$Target,$Port,$Status,$Latency"
}

# 启动7小时循环测试
$TimeEnd = (Get-Date).AddHours($TestDurationHours)
Do {
    $resultLine = Test-PortPing -Target $Server -Port $TestPort
    # 追加写入日志,注意加-Append参数
    $resultLine | Out-File -FilePath $LogPath -Encoding UTF8 -Append
    Start-Sleep -Seconds $TestIntervalSeconds
} Until ((Get-Date) -ge $TimeEnd)

Write-Host "7小时端口监测已完成,日志已保存至 $LogPath" -ForegroundColor Green
方案说明
  • 新增-n 1 -q参数调用PSPing,仅输出单次测试的核心结果,避免多余的 banner、统计信息干扰解析
  • 直接解析PSPing的输出结果,结构化写入CSV,后续可以直接用Excel打开筛选不通、高延迟的记录
  • 每次写入日志用-Append参数,不会覆盖之前的内容
  • 时间戳统一按yyyy-MM-dd HH:mm:ss格式记录,排查问题时可以直接对应时间点
  • 新增日志目录自动创建逻辑,避免因为目录不存在导致的写日志失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:36:05