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
相关推荐
pk_xz12345633 分钟前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强36 分钟前
Linux之sed命令详解
linux·运维·服务器
海绵波波10742 分钟前
Webserver(4.3)TCP通信实现
服务器·网络·tcp/ip
Lary_Rock3 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
热爱跑步的恒川4 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
云飞云共享云桌面5 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
一坨阿亮6 小时前
Linux 使用中的问题
linux·运维
音徽编程7 小时前
Rust异步运行时框架tokio保姆级教程
开发语言·网络·rust
幺零九零零8 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
wclass-zhengge8 小时前
Docker篇(Docker Compose)
运维·docker·容器