前提是要开启SSH
思路通过登录设备后,用命令display device manuinfo提取设备信息,display version提取版本信息后,进行筛选出设备型号、系列号、mac地址、生产日期、设备生产厂商、设备版本如是V3,V5,V7,及多少电口多少光口。
以下代码是整合先单独备份配置及所有查询到的信息先保存一个txt,然后对交换机的设备信息,及版本信息分别保存两表格。后期会整合成一个表格,优化空间还很大。有时间再弄。
import pandas as pd
from netmiko import ConnectHandler
# 读取Excel文件
df = pd.read_excel('1.xlsx', engine='openpyxl') # 替换为你的Excel文件路径
# 创建一个空的DataFrame来保存设备信息
device_info_df = pd.DataFrame(columns=['IP', 'DEVICE_NAME', 'DEVICE_SERIAL_NUMBER',
'MAC_ADDRESS', 'MANUFACTURING_DATE', 'VENDOR_NAME'])
# 创建一个空的DataFrame来保存版本信息
version_info_df = pd.DataFrame(columns=['IP', 'SOFTWARE_VERSION', 'DEVICE_MODEL'])
# 遍历每一行
for index, row in df.iterrows():
device = {
'device_type': 'hp_comware', # 修改为你的设备类型
'ip': row['ip'], # 替换为你的Excel文件中的列名
'username': row['Username'], # 替换为你的Excel文件中的列名
'password': str(row['Password']), # 将密码转换为字符串# 替换为你的Excel文件中的列名
}
# 你要执行的命令列表
commands = ['display current-configuration', 'display device manuinfo', 'display version']
# 连接到设备
with ConnectHandler(**device) as connection:
# 打开文件
with open(f'{device["ip"]}_backup.txt', 'w') as file:
for command in commands:
output = connection.send_command(command) # 执行命令
file.write(f'Command: {command}\nOutput:\n{output}\n') # 将结果写入文件
file.write('*' * 500 + '\n') # 添加分隔符
# 提取设备信息
if 'display device manuinfo' in command:
lines = output.split('\n')
device_info = {'IP': device["ip"], 'DEVICE_NAME': 'Not found', 'DEVICE_SERIAL_NUMBER': 'Not found',
'MAC_ADDRESS': 'Not found', 'MANUFACTURING_DATE': 'Not found',
'VENDOR_NAME': 'Not found'} # 默认值
for line in lines:
for key in device_info.keys():
if key in line:
device_info[key] = line.split(':')[-1].strip()
# 将设备信息添加到DataFrame
device_info_df.loc[len(device_info_df)] = device_info
# 提取版本信息
if 'display version' in command:
lines = output.split('\n')
version_info = {'IP': device["ip"], 'SOFTWARE_VERSION': 'Not found', 'DEVICE_MODEL': 'Not found'}
for line in lines:
if 'System image version' in line:
version_info['SOFTWARE_VERSION'] = line.split(':')[-1].strip()
if '[SubSlot 0]' in line:
version_info['DEVICE_MODEL'] = line.split(']')[-1].strip()
# 将版本信息添加到DataFrame
version_info_df.loc[len(version_info_df)] = version_info
print("Backup completed for all devices.")
# 将设备信息保存到Excel文件
device_info_df.to_excel('device_info.xlsx', index=False)
# 将版本信息保存到Excel文件
version_info_df.to_excel('version_info.xlsx', index=False)