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

如何用PowerShell提取交换机NQA历史输出并写入CSV(支持追加)

完整实现PowerShell脚本提取交换机NQA历史数据到CSV

1. 依赖准备

确保PowerShell环境具备SSH连接能力,推荐两种实现方式:

  • 方式一:安装Posh-SSH模块
    打开管理员权限PowerShell,执行安装命令:
    Install-Module Posh-SSH -Scope CurrentUser -Force
    
  • 方式二:使用系统自带OpenSSH客户端
    Windows 10 1809+/Server 2019+默认预装,若未安装可通过「设置-应用-可选功能」添加「OpenSSH客户端」。

2. 完整脚本实现

以下脚本覆盖SSH连接、命令执行、数据提取、CSV追加全流程:

# 配置核心参数
$switchIp = "12.68.15.11"
$username = "你的交换机用户名"
$password = ConvertTo-SecureString "你的交换机密码" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($username, $password)
$txtTempPath = "C:\temp\nqa_history_temp.txt"
$csvOutputPath = "C:\temp\nqa_history.csv"

# --------------------------
# 1. SSH连接并执行命令
# --------------------------
# 用Posh-SSH连接(若用OpenSSH可替换下方代码)
$sshSession = New-SSHSession -ComputerName $switchIp -Credential $credential -AcceptKey
if ($sshSession.Connected) {
    $commandResult = Invoke-SSHCommand -SessionId $sshSession.SessionId -Command "display nqa history"
    $commandResult.Output | Out-File -Path $txtTempPath -Encoding UTF8
    Remove-SSHSession -SessionId $sshSession.SessionId
}
else {
    Write-Error "连接交换机 $switchIp 失败"
    exit 1
}

# OpenSSH连接方式(替换上面Posh-SSH代码)
# ssh "$username@$switchIp" "display nqa history" | Out-File -Path $txtTempPath -Encoding UTF8

# --------------------------
# 2. 解析输出提取目标列
# --------------------------
$rawContent = Get-Content -Path $txtTempPath -Encoding UTF8 | Where-Object { $_ -match '\S' } # 过滤空行

# 定位表头行(匹配包含目标列的行)
$headerRow = $rawContent | Where-Object { $_ -match 'Index\s+Response\s+Status\s+Time' }
if (-not $headerRow) {
    Write-Error "未识别到目标表格表头"
    exit 1
}

# 提取表头之后的数据行
$dataRows = $rawContent | Select-Object -Skip ($rawContent.IndexOf($headerRow) + 1)

# 转换数据为对象格式
$nqaRecords = foreach ($row in $dataRows) {
    # 跳过总计行、分隔线等非数据行(根据交换机输出调整规则)
    if ($row -match 'Total' -or $row -match '^\s*---') { break }

    # 按多空格分割列,过滤空值
    $columns = $row -split '\s+' | Where-Object { $_ }
    [PSCustomObject]@{
        Index     = $columns[0]
        Response  = $columns[1]
        Status    = $columns[2]
        Time      = $columns[3]
    }
}

# --------------------------
# 3. 追加数据到CSV
# --------------------------
if ($nqaRecords) {
    # 首次运行创建文件并写入表头,后续直接追加
    if (-not (Test-Path $csvOutputPath)) {
        $nqaRecords | Export-Csv -Path $csvOutputPath -NoTypeInformation -Encoding UTF8
    }
    else {
        $nqaRecords | Export-Csv -Path $csvOutputPath -Append -NoTypeInformation -Encoding UTF8
    }
}
else {
    Write-Warning "未提取到有效NQA历史数据"
}

脚本注意事项

  • 若交换机输出的表格列顺序或分隔规则有差异,需调整$columns的索引值;
  • 明文密码存在安全风险,建议改用ConvertFrom-SecureString加密存储密码,运行时解密调用;
  • 可按需添加日志记录、异常捕获逻辑,提升脚本稳定性。

3. 配置每4小时自动执行

通过Windows任务计划程序实现定时触发:

  1. 打开「任务计划程序」,点击「创建任务」;
  2. 常规选项卡:勾选「使用最高权限运行」,设置任务名称;
  3. 触发器选项卡:新建触发器,选择「按预定计划」,设置为每天执行,重复间隔4小时,持续时间设为「无限期」;
  4. 操作选项卡:新建操作,选择「启动程序」,程序/脚本填powershell.exe,参数填-NoProfile -ExecutionPolicy Bypass -File "你的脚本完整路径.ps1";
  5. 设置选项卡:按需勾选「任务失败时重试」「超时停止」等规则;
  6. 保存任务完成配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:35:25