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
相关推荐
朱颜辞镜花辞树‎4 分钟前
GitHub 操作指南:项目协作与自动化工作流实践
运维·自动化·github
孙克旭_1 小时前
day051-ansible循环、判断与jinja2模板
linux·运维·服务器·网络·ansible
总有刁民想爱朕ha1 小时前
零基础搭建监控系统:Grafana+InfluxDB 保姆级教程,5分钟可视化服务器性能!
运维·服务器·grafana
Mr_Orangechen2 小时前
Linux 下使用 VS Code 远程 GDB 调试 ARM 程序
linux·运维·arm开发
悟空胆好小2 小时前
分音塔科技(BABEL Technology) 的公司背景、股权构成、产品类型及技术能力的全方位解读
网络·人工智能·科技·嵌入式硬件
撰卢2 小时前
【个人笔记】负载均衡
运维·笔记·负载均衡
lilian1293 小时前
linux系统mysql性能优化
linux·运维·mysql
ssswywywht3 小时前
OSPF实验
网络
FCM663 小时前
HCIA第一次实验报告:静态路由综合实验
网络·tcp/ip·信息与通信
apihz3 小时前
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
android·服务器·开发语言·网络·数据库·网络协议·tcp/ip