excel核对设备配置是否抓取完整 vbs代码

目录

需求

工作中,我们常会通过自动化手动自动记录log等方式抓取设备的配置,但我们可能遇到设备抓取可能不全。

同时,基于自动化的抓取一般都会存放到excel工作表中,以sheet表示不同的设备。

人工核对的工作量比较大,因此可以python编写脚本判断或excel vbs代码判断等方式。

由于我的环境不允许使用python,因此本文将分享一个vbs判断设备配置是否备份完整的代码。

方法

思考判断方式

由于设备是Cisco和H3C混用,因此最后的返回值是不太一样的。

  • Cisco
    Cisco设备 show running-config 后,最终的结果以end结尾,而设备名以#结尾(标准是在enable视图而非conf t视图进行show)
  • H3C
    H3C设备display current-configuration 后,最终的结果以return结尾,而设备名以<开头和>结尾。

不过我们只要根据最后一行输出结果,同时判断设备名是否输出出来,即可判断配置抓取是否完整。

  1. 脚本阅读到endreturn后,进行判断:
    1. end,判断下一行是否以#结尾;
    2. return,判断下一行是否以<开头和>结尾;
  2. 根据判断,如果上一步的12的返回值都是false,则返回false,否则就返回true

理清思路后,我们可以用各类AI进行代码生成,准确率很高(我就是这样做的)

代码

该代码会创建一个新的sheet,创建四列,第一列为IP、第二三列为return后存在设备名end后存在设备名,第四列为最终判断该设备是否配置抓取完整

vba 复制代码
Sub CheckReturnFollowedByBrackets()
    Dim ws As Worksheet
    Dim newSheet As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim result As String
    Dim cellValue As String
    Dim resultRow As Long
    Dim returnResult As String
    Dim endResult As String
    Dim overallResult As String

    ' 创建一个新工作表,并将其移动到第一个工作表之前
    Set newSheet = ThisWorkbook.Worksheets.Add(Before:=ThisWorkbook.Sheets(1))
    newSheet.Name = "Results"
    
    ' 在新工作表中添加标题
    newSheet.Cells(1, 1).Value = "Sheet Name"
    newSheet.Cells(1, 2).Value = "Return Result"
    newSheet.Cells(1, 3).Value = "End Result"
    newSheet.Cells(1, 4).Value = "Overall Result"
    resultRow = 2

    ' 遍历所有工作表
    For Each ws In ThisWorkbook.Worksheets
        ' 忽略结果工作表
        If ws.Name <> "Results" Then
            lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
            returnResult = "False"
            endResult = "False"
            overallResult = "False"

            ' 遍历第一列
            For i = 1 To lastRow
                If ws.Cells(i, 1).Value = "return" Then
                    If i + 1 <= lastRow Then
                        cellValue = ws.Cells(i + 1, 1).Value
                        If Left(cellValue, 1) = "<" And Right(cellValue, 1) = ">" Then
                            returnResult = "True"
                        End If
                    End If
                End If
                
                If ws.Cells(i, 1).Value = "end" Then
                    If i + 1 <= lastRow Then
                        cellValue = ws.Cells(i + 1, 1).Value
                        If Right(cellValue, 1) = "#" Then
                            endResult = "True"
                        End If
                    End If
                End If
            Next i
            
            ' 如果任一结果为 True,则整体结果为 True
            If returnResult = "True" Or endResult = "True" Then
                overallResult = "True"
            End If
            
            ' 将结果写入新工作表
            newSheet.Cells(resultRow, 1).Value = ws.Name
            newSheet.Cells(resultRow, 2).Value = returnResult
            newSheet.Cells(resultRow, 3).Value = endResult
            newSheet.Cells(resultRow, 4).Value = overallResult
            resultRow = resultRow + 1
        End If
    Next ws
End Sub

如何使用这个VBA代码:

  1. 打开你的Excel文件。
  2. Alt + F11 打开VBA编辑器。
  3. 在VBA编辑器中,点击 Insert -> Module 插入一个新模块。
  4. 将上面的代码粘贴到新模块中。
  5. 关闭VBA编辑器。
  6. 回到Excel,按 Alt + F8 打开宏对话框,选择 CheckReturnFollowedByBrackets,然后点击 运行

这个宏会遍历所有工作表,检查每个工作表中的第一列,找到值为 "return" 的单元格,并检查它的下一行是否以 "<" 开头并以 ">" 结尾。同时,它会找到值为 "end" 的单元格,并检查它的下一行是否以 "#" 结尾。结果会写入一个名为 "Results" 的新工作表中,并且如果某个工作表中任一结果为 "True",则在第四列输出 "True",否则输出 "False"。

结果

  • Sheet1是正常的测试,以return结尾,设备名输出正常,因此为True
  • Sheet2、6、3 均是模拟了缺漏配置,第四列输出为False
  • Sheet7是正常的测试,以end结尾,设备名输出正常,因此为True
相关推荐
速盾cdn3 小时前
速盾:CDN是否支持屏蔽IP?
网络·网络协议·tcp/ip
yaoxin5211233 小时前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
内核程序员kevin3 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
PersistJiao4 小时前
Spark 分布式计算中网络传输和序列化的关系(一)
大数据·网络·spark
黑客Ash7 小时前
【D01】网络安全概论
网络·安全·web安全·php
->yjy7 小时前
计算机网络(第一章)
网络·计算机网络·php
朝九晚五ฺ7 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
摘星星ʕ•̫͡•ʔ8 小时前
计算机网络 第三章:数据链路层(关于争用期的超详细内容)
网络·计算机网络
Kkooe8 小时前
GitLab|数据迁移
运维·服务器·git