如何用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任务计划程序实现定时触发:
- 打开「任务计划程序」,点击「创建任务」;
- 常规选项卡:勾选「使用最高权限运行」,设置任务名称;
- 触发器选项卡:新建触发器,选择「按预定计划」,设置为每天执行,重复间隔4小时,持续时间设为「无限期」;
- 操作选项卡:新建操作,选择「启动程序」,程序/脚本填
powershell.exe,参数填-NoProfile -ExecutionPolicy Bypass -File "你的脚本完整路径.ps1"; - 设置选项卡:按需勾选「任务失败时重试」「超时停止」等规则;
- 保存任务完成配置。
内容的提问来源于stack exchange,提问作者Empty Coder
相关产品推荐
相关产品推荐

