[{"data":1,"prerenderedAt":825},["ShallowReactive",2],{"navigation":3,"blogNavigation":232,"page-\u002Fdocs\u002Fswitchops%E4%BA%A4%E6%8D%A2%E6%9C%BA%E5%B7%A1%E6%A3%80\u002Freports-history":418,"\u002Fdocs\u002Fswitchops%E4%BA%A4%E6%8D%A2%E6%9C%BA%E5%B7%A1%E6%A3%80\u002Freports-history-surround":820},[4],{"title":5,"path":6,"stem":7,"children":8,"page":57},"Docs","\u002Fdocs","docs",[9,176,184],{"title":10,"path":11,"stem":12,"children":13,"icon":16},"简单文档","\u002Fdocs\u002F简单文档","docs\u002F1.简单文档\u002F1.index",[14,17,22,58,63,166,171],{"title":15,"path":11,"stem":12,"icon":16},"入门简介","lucide-house",{"title":18,"path":19,"stem":20,"icon":21},"安装与开发","\u002Fdocs\u002F简单文档\u002Finstallation","docs\u002F1.简单文档\u002F2.installation","lucide-play",{"title":23,"path":24,"stem":25,"children":26,"page":57},"开始写作","\u002Fdocs\u002F简单文档\u002Fwriting","docs\u002F1.简单文档\u002F3.writing",[27,32,37,42,47,52],{"title":28,"path":29,"stem":30,"icon":31},"Markdown","\u002Fdocs\u002F简单文档\u002Fwriting\u002Fmarkdown","docs\u002F1.简单文档\u002F3.writing\u002F1.markdown","simple-icons:markdown",{"title":33,"path":34,"stem":35,"icon":36},"页面 frontmatter","\u002Fdocs\u002F简单文档\u002Fwriting\u002Fpages","docs\u002F1.简单文档\u002F3.writing\u002F2.pages","lucide:file-text",{"title":38,"path":39,"stem":40,"icon":41},"目录与文件命名","\u002Fdocs\u002F简单文档\u002Fwriting\u002Ffolders","docs\u002F1.简单文档\u002F3.writing\u002F3.folders","lucide:folder",{"title":43,"path":44,"stem":45,"icon":46},"单页面示例","\u002Fdocs\u002F简单文档\u002Fwriting\u002Ffull-page-example","docs\u002F1.简单文档\u002F3.writing\u002F4.full-page-example","lucide:layout-template",{"title":48,"path":49,"stem":50,"icon":51},"内容检查与测试","\u002Fdocs\u002F简单文档\u002Fwriting\u002Ftest","docs\u002F1.简单文档\u002F3.writing\u002F5.test","lucide:shield-check",{"title":53,"path":54,"stem":55,"icon":56},"在文章中使用组件","\u002Fdocs\u002F简单文档\u002Fwriting\u002Fmdc-content","docs\u002F1.简单文档\u002F3.writing\u002F6.mdc-content","lucide-blocks",false,{"title":59,"path":60,"stem":61,"icon":62},"部署服务","\u002Fdocs\u002F简单文档\u002Fdeployment","docs\u002F1.简单文档\u002F4.deployment","lucide:cloud",{"title":64,"path":65,"stem":66,"children":67,"page":57},"组件特性","\u002Fdocs\u002F简单文档\u002Fcomponents","docs\u002F1.简单文档\u002F5.components",[68,73,77,81,85,89,93,97,101,105,110,114,118,122,126,131,136,141,146,150,154,158,162],{"title":69,"path":70,"stem":71,"icon":72},"常用组件","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fapi","docs\u002F1.简单文档\u002F5.components\u002F1.API","lucide-component",{"title":74,"path":75,"stem":76},"Alert","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Falert","docs\u002F1.简单文档\u002F5.components\u002Falert",{"title":78,"path":79,"stem":80},"Badge","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fbadge","docs\u002F1.简单文档\u002F5.components\u002Fbadge",{"title":82,"path":83,"stem":84},"Button Link","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fbutton-link","docs\u002F1.简单文档\u002F5.components\u002Fbutton-link",{"title":86,"path":87,"stem":88},"Callout","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fcallout","docs\u002F1.简单文档\u002F5.components\u002Fcallout",{"title":90,"path":91,"stem":92},"Card","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fcard","docs\u002F1.简单文档\u002F5.components\u002Fcard",{"title":94,"path":95,"stem":96},"Card Group","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fcard-group","docs\u002F1.简单文档\u002F5.components\u002Fcard-group",{"title":98,"path":99,"stem":100},"Code Group","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fcode-group","docs\u002F1.简单文档\u002F5.components\u002Fcode-group",{"title":102,"path":103,"stem":104},"Code Tree","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fcode-tree","docs\u002F1.简单文档\u002F5.components\u002Fcode-tree",{"title":106,"path":107,"stem":108,"icon":109},"博客与文档内容块","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fcontent-blocks","docs\u002F1.简单文档\u002F5.components\u002Fcontent-blocks","lucide-panels-top-left",{"title":111,"path":112,"stem":113},"Field","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Ffield","docs\u002F1.简单文档\u002F5.components\u002Ffield",{"title":115,"path":116,"stem":117},"Field Group","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Ffield-group","docs\u002F1.简单文档\u002F5.components\u002Ffield-group",{"title":119,"path":120,"stem":121},"File Tree","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Ffile-tree","docs\u002F1.简单文档\u002F5.components\u002Ffile-tree",{"title":123,"path":124,"stem":125},"Icon","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Ficon","docs\u002F1.简单文档\u002F5.components\u002Ficon",{"title":127,"path":128,"stem":129,"icon":130},"数据、API 与阅读交互组件","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Finteractive-blocks","docs\u002F1.简单文档\u002F5.components\u002Finteractive-blocks","lucide-table-properties",{"title":132,"path":133,"stem":134,"icon":135},"进阶组件交互演示","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Finteractive-showcase","docs\u002F1.简单文档\u002F5.components\u002Finteractive-showcase","lucide-sliders-horizontal",{"title":137,"path":138,"stem":139,"icon":140},"MDC 语法与组件注册","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fmdc-guide","docs\u002F1.简单文档\u002F5.components\u002Fmdc-guide","lucide-file-code",{"title":142,"path":143,"stem":144,"icon":145},"MDC 组件交互演示","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fmdc-showcase","docs\u002F1.简单文档\u002F5.components\u002Fmdc-showcase","lucide-mouse-pointer-click",{"title":147,"path":148,"stem":149},"Playground","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fplayground","docs\u002F1.简单文档\u002F5.components\u002Fplayground",{"title":151,"path":152,"stem":153},"Read More","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fread-more","docs\u002F1.简单文档\u002F5.components\u002Fread-more",{"title":155,"path":156,"stem":157},"Stack","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fstack","docs\u002F1.简单文档\u002F5.components\u002Fstack",{"title":159,"path":160,"stem":161},"Steps","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Fsteps","docs\u002F1.简单文档\u002F5.components\u002Fsteps",{"title":163,"path":164,"stem":165},"Tabs","\u002Fdocs\u002F简单文档\u002Fcomponents\u002Ftabs","docs\u002F1.简单文档\u002F5.components\u002Ftabs",{"title":167,"path":168,"stem":169,"icon":170},"功能与路线图","\u002Fdocs\u002F简单文档\u002F功能与路线图","docs\u002F1.简单文档\u002F6.功能与路线图","lucide:map",{"title":172,"path":173,"stem":174,"icon":175},"Nuxt Studio 现状与运维说明","\u002Fdocs\u002F简单文档\u002Fnuxt-studio-upgrade-plan","docs\u002F1.简单文档\u002F7.nuxt-studio-upgrade-plan","simple-icons:nuxtdotjs",{"title":177,"path":178,"stem":179,"children":180,"icon":183},"无人自助系统","\u002Fdocs\u002F无人自助系统","docs\u002F2.无人自助系统\u002F1.index",[181],{"title":182,"path":178,"stem":179,"icon":183},"介绍","simple-icons:opencollective",{"title":185,"path":186,"stem":187,"children":188,"icon":191},"SwitchOps 交换机巡检","\u002Fdocs\u002Fswitchops交换机巡检","docs\u002F3.SwitchOps交换机巡检\u002F1.index",[189,192,197,202,207,212,217,222,227],{"title":190,"path":186,"stem":187,"icon":191},"产品简介","lucide:house",{"title":193,"path":194,"stem":195,"icon":196},"快速开始","\u002Fdocs\u002Fswitchops交换机巡检\u002Fquick-start","docs\u002F3.SwitchOps交换机巡检\u002F2.quick-start","lucide:rocket",{"title":198,"path":199,"stem":200,"icon":201},"设备清单配置","\u002Fdocs\u002Fswitchops交换机巡检\u002Fdevice-config","docs\u002F3.SwitchOps交换机巡检\u002F3.device-config","lucide:list-tree",{"title":203,"path":204,"stem":205,"icon":206},"图形界面使用","\u002Fdocs\u002Fswitchops交换机巡检\u002Fgui-guide","docs\u002F3.SwitchOps交换机巡检\u002F4.gui-guide","lucide:monitor",{"title":208,"path":209,"stem":210,"icon":211},"命令行使用","\u002Fdocs\u002Fswitchops交换机巡检\u002Fcli-guide","docs\u002F3.SwitchOps交换机巡检\u002F5.cli-guide","lucide:square-terminal",{"title":213,"path":214,"stem":215,"icon":216},"报告与历史数据","\u002Fdocs\u002Fswitchops交换机巡检\u002Freports-history","docs\u002F3.SwitchOps交换机巡检\u002F6.reports-history","lucide:file-chart-column",{"title":218,"path":219,"stem":220,"icon":221},"高级配置","\u002Fdocs\u002Fswitchops交换机巡检\u002Fadvanced-config","docs\u002F3.SwitchOps交换机巡检\u002F7.advanced-config","lucide:settings",{"title":223,"path":224,"stem":225,"icon":226},"Windows 打包部署","\u002Fdocs\u002Fswitchops交换机巡检\u002Fwindows-deployment","docs\u002F3.SwitchOps交换机巡检\u002F8.windows-deployment","lucide:package",{"title":228,"path":229,"stem":230,"icon":231},"故障排查与安全","\u002Fdocs\u002Fswitchops交换机巡检\u002Ftroubleshooting-security","docs\u002F3.SwitchOps交换机巡检\u002F9.troubleshooting-security","lucide:shield-alert",[233],{"title":234,"path":235,"stem":236,"children":237,"page":57},"Blog","\u002Fblog","blog",[238,401,410],{"title":239,"path":240,"stem":241,"children":242,"page":57},"技术栈","\u002Fblog\u002F技术栈","blog\u002F1.技术栈",[243,248,253,258,262,267,271,276,280,284,289,294,299,303,307,311,315,319,324,328,333,338,343,347,352,357,362,367,372,376,381,386,391,396],{"title":244,"path":245,"stem":246,"icon":247},"最近给文档站补了些什么","\u002Fblog\u002F技术栈\u002Festel-docs-recent-updates","blog\u002F1.技术栈\u002F968.estel-docs-recent-updates","lucide:blocks",{"title":249,"path":250,"stem":251,"icon":252},"国产化终端能上办公网，却登录不了 OA：一次网络准入故障排查","\u002Fblog\u002F技术栈\u002F国产化终端办公oa网络准入故障排查","blog\u002F1.技术栈\u002F969.国产化终端办公OA网络准入故障排查","lucide:network",{"title":254,"path":255,"stem":256,"icon":257},"准备新的插件","\u002Fblog\u002F技术栈\u002F新的插件","blog\u002F1.技术栈\u002F970.新的插件","simple-icons:debian",{"title":259,"path":260,"stem":261,"icon":257},"防于未然，先固不破 — Debian 12 快速加固实战","\u002Fblog\u002F技术栈\u002F服务器加固实战","blog\u002F1.技术栈\u002F971.服务器加固实战",{"title":263,"path":264,"stem":265,"icon":266},"nmap高级应用技巧-实战","\u002Fblog\u002F技术栈\u002Fnmap高级应用技巧-实战","blog\u002F1.技术栈\u002F972.nmap高级应用技巧-实战","simple-icons:openstreetmap",{"title":268,"path":269,"stem":270,"icon":266},"nmap高级应用技巧-NSE","\u002Fblog\u002F技术栈\u002Fnmap高级应用技巧-nse","blog\u002F1.技术栈\u002F973.nmap高级应用技巧-NSE",{"title":272,"path":273,"stem":274,"icon":275},"部分vue组件语法预览","\u002Fblog\u002F技术栈\u002F部分组件语法展示","blog\u002F1.技术栈\u002F974.部分组件语法展示","simple-icons:vuedotjs",{"title":277,"path":278,"stem":279,"icon":175},"新的文档渲染样式","\u002Fblog\u002F技术栈\u002F新的文档渲染样式","blog\u002F1.技术栈\u002F975.新的文档渲染样式",{"title":281,"path":282,"stem":283,"icon":175},"Nuxt 微信分享接口","\u002Fblog\u002F技术栈\u002Fnuxt-微信分享接口","blog\u002F1.技术栈\u002F976.Nuxt 微信分享接口",{"title":285,"path":286,"stem":287,"icon":288},"AI复合应用 合同审查","\u002Fblog\u002F技术栈\u002Fai复合应用-合同审查","blog\u002F1.技术栈\u002F978.AI复合应用 合同审查","simple-icons:openai",{"title":290,"path":291,"stem":292,"icon":293},"Kali 安装 GVM","\u002Fblog\u002F技术栈\u002Fkali-安装-gvm","blog\u002F1.技术栈\u002F979.Kali 安装 GVM","simple-icons:kalilinux",{"title":295,"path":296,"stem":297,"icon":298},"GPT-5","\u002Fblog\u002F技术栈\u002Fgpt5","blog\u002F1.技术栈\u002F980.GPT5","simple-icons:powershell",{"title":300,"path":301,"stem":302,"icon":288},"使用 AI 守护内网安全","\u002Fblog\u002F技术栈\u002F使用-ai-守护内网安全","blog\u002F1.技术栈\u002F981.使用 AI 守护内网安全",{"title":304,"path":305,"stem":306,"icon":266},"系统安全扫描工具命令集合","\u002Fblog\u002F技术栈\u002F系统安全扫描工具命令集合","blog\u002F1.技术栈\u002F982.系统安全扫描工具命令集合",{"title":308,"path":309,"stem":310},"用 MDC 组织技术文章","\u002Fblog\u002F技术栈\u002Fmdc-article-example","blog\u002F1.技术栈\u002F983.mdc-article-example",{"title":312,"path":313,"stem":314,"icon":293},"系统安全综合评估报告","\u002Fblog\u002F技术栈\u002F系统安全综合评估报告","blog\u002F1.技术栈\u002F983.系统安全综合评估报告",{"title":316,"path":317,"stem":318},"用交互组件写一份技术说明","\u002Fblog\u002F技术栈\u002Fmdc-interactive-example","blog\u002F1.技术栈\u002F984.mdc-interactive-example",{"title":320,"path":321,"stem":322,"icon":323},"树莓派安装 Kali Linux","\u002Fblog\u002F技术栈\u002F树莓派安装-kali-linux","blog\u002F1.技术栈\u002F984.树莓派安装 Kali Linux","simple-icons:raspberrypi",{"title":325,"path":326,"stem":327,"icon":175},"Nuxt UI Pro","\u002Fblog\u002F技术栈\u002Fnuxt-ui-pro","blog\u002F1.技术栈\u002F985.Nuxt UI Pro",{"title":329,"path":330,"stem":331,"icon":332},"Supabase 阿里云短信","\u002Fblog\u002F技术栈\u002Fsupabase-阿里云短信","blog\u002F1.技术栈\u002F986.Supabase 阿里云短信","simple-icons:alibabacloud",{"title":334,"path":335,"stem":336,"icon":337},"Coolify","\u002Fblog\u002F技术栈\u002Fcoolify","blog\u002F1.技术栈\u002F987.Coolify","simple-icons:chai",{"title":339,"path":340,"stem":341,"icon":342},"Python 代码规范","\u002Fblog\u002F技术栈\u002Fpython-代码规范","blog\u002F1.技术栈\u002F988.Python 代码规范","simple-icons:python",{"title":344,"path":345,"stem":346,"icon":175},"Nuxt3 代码规范","\u002Fblog\u002F技术栈\u002Fnuxt3-代码规范","blog\u002F1.技术栈\u002F989.Nuxt3 代码规范",{"title":348,"path":349,"stem":350,"icon":351},"Linux 系统 Swap 分区配置指南","\u002Fblog\u002F技术栈\u002Flinux-系统-swap-分区配置指南","blog\u002F1.技术栈\u002F990.Linux 系统 Swap 分区配置指南","simple-icons:linux",{"title":353,"path":354,"stem":355,"icon":356},"从Supabase迁移到Appwrite","\u002Fblog\u002F技术栈\u002F从supabase迁移到appwrite","blog\u002F1.技术栈\u002F991.从Supabase迁移到Appwrite","simple-icons:supabase",{"title":358,"path":359,"stem":360,"icon":361},"AppWrite 项目资源占用情况","\u002Fblog\u002F技术栈\u002Fappwrite-项目资源占用情况","blog\u002F1.技术栈\u002F992.AppWrite 项目资源占用情况","simple-icons:appwrite",{"title":363,"path":364,"stem":365,"icon":366},"Docker 里配置hosts","\u002Fblog\u002F技术栈\u002Fdocker-里配置hosts","blog\u002F1.技术栈\u002F993.Docker 里配置hosts","simple-icons:docker",{"title":368,"path":369,"stem":370,"icon":371},"MySQL 中如何忽略表名的大小写","\u002Fblog\u002F技术栈\u002Fmysql-中如何忽略表名的大小写","blog\u002F1.技术栈\u002F994.MySQL 中如何忽略表名的大小写","simple-icons:mysql",{"title":373,"path":374,"stem":375,"icon":257},"Debian 12 安装nodejs","\u002Fblog\u002F技术栈\u002Fdebian-12-安装nodejs","blog\u002F1.技术栈\u002F995.Debian 12 安装nodejs",{"title":377,"path":378,"stem":379,"icon":380},"Dify + Supabase：打造带数据库的AI问答机器人","\u002Fblog\u002F技术栈\u002Fdify-supabase：打造带数据库的ai问答机器人","blog\u002F1.技术栈\u002F996.Dify + Supabase：打造带数据库的AI问答机器人","simple-icons:reactbootstrap",{"title":382,"path":383,"stem":384,"icon":385},"安装 VS Code到浏览器 -- Code Server","\u002Fblog\u002F技术栈\u002F安装-vs-code到浏览器-code-server-copy","blog\u002F1.技术栈\u002F996.安装 VS Code到浏览器 -- Code Server copy","simple-icons:visualstudiocode",{"title":387,"path":388,"stem":389,"icon":390},"Debian 12 云服务器初始安全设置与优化指南","\u002Fblog\u002F技术栈\u002Fdebian-12-云服务器初始安全设置与优化指南","blog\u002F1.技术栈\u002F997.Debian 12 云服务器初始安全设置与优化指南","lucide-server",{"title":392,"path":393,"stem":394,"icon":395},"Iperf3 万兆网络打流测试指南","\u002Fblog\u002F技术栈\u002Fiperf3-万兆网络打流测试指南","blog\u002F1.技术栈\u002F998.Iperf3 万兆网络打流测试指南","lucide-network",{"title":397,"path":398,"stem":399,"icon":400},"GROK3 and Deepseek","\u002Fblog\u002F技术栈\u002Fgrok3-and-deepseek","blog\u002F1.技术栈\u002F999.GROK3-and-Deepseek","lucide-brain",{"title":402,"path":403,"stem":404,"children":405,"page":57},"AI","\u002Fblog\u002Fai","blog\u002F2.AI",[406],{"title":407,"path":408,"stem":409,"icon":337},"AI最佳实践","\u002Fblog\u002Fai\u002Fai","blog\u002F2.AI\u002F01.AI",{"title":411,"path":412,"stem":413,"children":414,"page":57},"生活","\u002Fblog\u002F生活","blog\u002F3.生活",[415],{"title":411,"path":416,"stem":417,"icon":337},"\u002Fblog\u002F生活\u002F生活","blog\u002F3.生活\u002F01.生活",{"id":419,"title":213,"badges":420,"body":421,"date":420,"description":812,"draft":57,"extension":813,"fullpage":57,"icon":420,"links":420,"meta":814,"navBadges":420,"navigation":815,"path":214,"rawbody":816,"seo":817,"stem":215,"updated":818,"__hash__":819},"docs\u002Fdocs\u002F3.SwitchOps交换机巡检\u002F6.reports-history.md",null,{"type":422,"value":423,"toc":799},"minimark",[424,428,432,443,446,449,455,461,464,468,471,477,481,484,512,515,518,521,536,539,542,549,610,613,616,619,669,672,688,695,699,706,712,715,718,765,768,774,795],[425,426,427],"h2",{"id":427},"输出目录结构",[429,430,431],"p",{},"每次运行按日期创建目录：",[433,434,440],"pre",{"className":435,"code":437,"language":438,"meta":439},[436],"language-text","outputs\u002F\n├── history.db\n└── YYYY-MM-DD\u002F\n    ├── raw\u002F       # 每台设备的原始命令回显\n    ├── reports\u002F   # 巡检汇总和失败设备 Excel\n    ├── queries\u002F   # ARP、MAC、端口查询结果\n    └── logs\u002F      # app.log 运行日志\n","text","",[441,442,437],"code",{"__ignoreMap":439},[429,444,445],{},"同一天多次运行会复用日期目录，通过文件名中的时间戳区分报告和查询文件。每台设备的原始巡检回显文件名不包含时间戳，因此同一天再次巡检同名、同 IP 设备时会覆盖当天上一份原始回显。",[425,447,448],{"id":448},"原始回显",[429,450,451,454],{},[441,452,453],{},"raw\u002F"," 中每台设备对应一个 TXT 文件，内容按命令分段：",[433,456,459],{"className":457,"code":458,"language":438,"meta":439},[436],"============================================================\n设备：核心交换机-S12704-3F-01\nIP：192.168.1.1\n命令：display version\n时间：2026-09-04 10:30:00\n============================================================\n\n\u003C设备原始回显>\n",[441,460,458],{"__ignoreMap":439},[429,462,463],{},"程序会先保存原始数据，再进行汇总解析。即使部分命令执行失败或解析规则未识别新型号回显，也可以通过原始文件人工复核。",[425,465,467],{"id":466},"excel-巡检汇总","Excel 巡检汇总",[429,469,470],{},"主报告文件名格式：",[433,472,475],{"className":473,"code":474,"language":438,"meta":439},[436],"巡检汇总_YYYY-MM-DD_HHMMSS.xlsx\n",[441,476,474],{"__ignoreMap":439},[478,479,480],"h3",{"id":480},"巡检汇总工作表",[429,482,483],{},"主要字段包括：",[485,486,487,491,494,497,500,503,506,509],"ul",{},[488,489,490],"li",{},"巡检时间、设备名称、IP、厂商、型号、角色和位置；",[488,492,493],{},"连接状态、设备主机名、软件版本和运行时间；",[488,495,496],{},"板卡、电源、风扇和温度状态；",[488,498,499],{},"CPU、内存和磁盘使用率；",[488,501,502],{},"up\u002Fdown 接口数量和接口错误数量；",[488,504,505],{},"ARP、MAC 数量；",[488,507,508],{},"重点接口状态、异常摘要和巡检结论；",[488,510,511],{},"对应的原始回显文件路径。",[429,513,514],{},"第一行自动加粗，工作表冻结首行并启用筛选。列宽会根据内容自动调整，最长限制为 60。",[478,516,517],{"id":517},"失败设备工作表与文件",[429,519,520],{},"存在连接失败设备时：",[485,522,523,526],{},[488,524,525],{},"主报告中增加“失败设备”工作表；",[488,527,528,531,532,535],{},[441,529,530],{},"reports\u002F"," 中额外生成 ",[441,533,534],{},"失败设备_YYYY-MM-DD_HHMMSS.xlsx","。",[429,537,538],{},"失败记录会保留设备信息、友好错误原因和“异常”结论，便于二次处理。",[478,540,541],{"id":541},"端口台账",[429,543,544,545,548],{},"当 ",[441,546,547],{},"display interface brief"," 或对应命令成功解析出接口行时，报告会增加“端口台账”工作表，包含：",[550,551,552,565],"table",{},[553,554,555],"thead",{},[556,557,558,562],"tr",{},[559,560,561],"th",{},"字段",[559,563,564],{},"说明",[566,567,568,580,588,596],"tbody",{},[556,569,570,574],{},[571,572,573],"td",{},"设备名称",[571,575,576,579],{},[441,577,578],{},"devices.yaml"," 中的名称。",[556,581,582,585],{},[571,583,584],{},"IP 地址",[571,586,587],{},"设备管理地址。",[556,589,590,593],{},[571,591,592],{},"端口",[571,594,595],{},"从 interface brief 回显中解析的接口名。",[556,597,598,601],{},[571,599,600],{},"链路状态",[571,602,603,606,607,535],{},[441,604,605],{},"up"," 或 ",[441,608,609],{},"down",[429,611,612],{},"普通 down 接口会进入数量和台账，但不会仅因为 down 就自动判定设备异常；只有配置为重点接口后，DOWN 才会直接影响结论。",[425,614,615],{"id":615},"巡检结论",[429,617,618],{},"Excel 中的结论使用颜色区分：",[550,620,621,634],{},[553,622,623],{},[556,624,625,628,631],{},[559,626,627],{},"结论",[559,629,630],{},"颜色",[559,632,633],{},"常见条件",[566,635,636,647,658],{},[556,637,638,641,644],{},[571,639,640],{},"正常",[571,642,643],{},"浅绿色",[571,645,646],{},"未发现达到阈值的资源异常，设备状态正常，重点接口均为 UP。",[556,648,649,652,655],{},[571,650,651],{},"关注",[571,653,654],{},"浅黄色",[571,656,657],{},"CPU\u002F内存超过关注阈值、接口存在错误计数、部分硬件状态未知或重点接口状态未知。",[556,659,660,663,666],{},[571,661,662],{},"异常",[571,664,665],{},"浅红色",[571,667,668],{},"连接失败、CPU\u002F内存达到严重阈值、板卡\u002F电源\u002F风扇\u002F温度异常或重点接口 DOWN。",[429,670,671],{},"默认资源判断规则：",[485,673,674,681],{},[488,675,676,677,680],{},"CPU 或内存大于 ",[441,678,679],{},"80%","：关注。",[488,682,683,684,687],{},"CPU 或内存大于等于 ",[441,685,686],{},"90%","：异常。",[429,689,690,691,694],{},"阈值可以在 ",[441,692,693],{},"config\u002Fsettings.yaml"," 中调整。解析结论适合帮助筛选，不应替代对原始回显、设备告警和监控平台的综合判断。",[425,696,698],{"id":697},"sqlite-历史库","SQLite 历史库",[429,700,701,702,705],{},"启用 ",[441,703,704],{},"db_enabled"," 后，每次巡检结束都会把所有结果写入：",[433,707,710],{"className":708,"code":709,"language":438,"meta":439},[436],"outputs\u002Fhistory.db\n",[441,711,709],{"__ignoreMap":439},[429,713,714],{},"数据库使用 SQLite，无需安装独立数据库服务。写入失败只记录警告，不会阻止 Excel 报告生成。",[429,716,717],{},"使用 CLI 查看历史：",[433,719,723],{"className":720,"code":721,"language":722,"meta":439,"style":439},"language-bash shiki shiki-themes github-light github-light github-dark vitesse-light vitesse-dark catppuccin-latte catppuccin-mocha one-light one-dark-pro material-theme-lighter material-theme-palenight min-light min-dark","python cli.py trend\npython cli.py trend --host 192.168.1.1 --limit 50\n","bash",[441,724,725,741],{"__ignoreMap":439},[726,727,730,734,738],"span",{"class":728,"line":729},"line",1,[726,731,733],{"class":732},"sCf0g","python",[726,735,737],{"class":736},"s254i"," cli.py",[726,739,740],{"class":736}," trend\n",[726,742,744,746,748,751,755,759,762],{"class":728,"line":743},2,[726,745,733],{"class":732},[726,747,737],{"class":736},[726,749,750],{"class":736}," trend",[726,752,754],{"class":753},"scmvv"," --host",[726,756,758],{"class":757},"s_Zq6"," 192.168.1.1",[726,760,761],{"class":753}," --limit",[726,763,764],{"class":757}," 50\n",[425,766,767],{"id":767},"数据保留与备份",[429,769,770,773],{},[441,771,772],{},"outputs\u002F"," 默认不提交 Git。生产使用时建议：",[485,775,776,779,786,789,792],{},[488,777,778],{},"根据巡检频率制定保留周期，避免原始回显和 Excel 长期占用磁盘。",[488,780,781,782,785],{},"定期备份 ",[441,783,784],{},"history.db","，备份前确保没有正在写入的巡检任务。",[488,787,788],{},"原始回显可能包含 IP、MAC、VLAN、接口描述和网络拓扑线索，应按内部运维资料保护。",[488,790,791],{},"分享 Excel 或 TXT 前先检查是否包含敏感信息。",[488,793,794],{},"归档同一天多次巡检的原始回显时，应在再次运行前复制整个日期目录，避免同名文件覆盖。",[796,797,798],"style",{},"html pre.shiki code .sCf0g, html code.shiki .sCf0g{--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-default:#6F42C1;--shiki-default-font-style:inherit;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit;--shiki-code-theme-vitesse-light:#59873A;--shiki-code-theme-vitesse-light-font-style:inherit;--shiki-code-theme-vitesse-dark:#80A665;--shiki-code-theme-vitesse-dark-font-style:inherit;--shiki-code-theme-catppuccin-light:#1E66F5;--shiki-code-theme-catppuccin-light-font-style:italic;--shiki-code-theme-catppuccin-dark:#89B4FA;--shiki-code-theme-catppuccin-dark-font-style:italic;--shiki-code-theme-one-light:#4078F2;--shiki-code-theme-one-light-font-style:inherit;--shiki-code-theme-one-dark:#61AFEF;--shiki-code-theme-one-dark-font-style:inherit;--shiki-code-theme-material-light:#E2931D;--shiki-code-theme-material-light-font-style:inherit;--shiki-code-theme-material-dark:#FFCB6B;--shiki-code-theme-material-dark-font-style:inherit;--shiki-code-theme-min-light:#6F42C1;--shiki-code-theme-min-light-font-style:inherit;--shiki-code-theme-min-dark:#B392F0;--shiki-code-theme-min-dark-font-style:inherit}html pre.shiki code .s254i, html code.shiki .s254i{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-code-theme-vitesse-light:#B56959;--shiki-code-theme-vitesse-dark:#C98A7D;--shiki-code-theme-catppuccin-light:#40A02B;--shiki-code-theme-catppuccin-dark:#A6E3A1;--shiki-code-theme-one-light:#50A14F;--shiki-code-theme-one-dark:#98C379;--shiki-code-theme-material-light:#91B859;--shiki-code-theme-material-dark:#C3E88D;--shiki-code-theme-min-light:#2B5581;--shiki-code-theme-min-dark:#9DB1C5}html pre.shiki code .scmvv, html code.shiki .scmvv{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-code-theme-vitesse-light:#A65E2B;--shiki-code-theme-vitesse-dark:#C99076;--shiki-code-theme-catppuccin-light:#40A02B;--shiki-code-theme-catppuccin-dark:#A6E3A1;--shiki-code-theme-one-light:#986801;--shiki-code-theme-one-dark:#D19A66;--shiki-code-theme-material-light:#91B859;--shiki-code-theme-material-dark:#C3E88D;--shiki-code-theme-min-light:#2B5581;--shiki-code-theme-min-dark:#9DB1C5}html pre.shiki code .s_Zq6, html code.shiki .s_Zq6{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-code-theme-vitesse-light:#2F798A;--shiki-code-theme-vitesse-dark:#4C9A91;--shiki-code-theme-catppuccin-light:#FE640B;--shiki-code-theme-catppuccin-dark:#FAB387;--shiki-code-theme-one-light:#986801;--shiki-code-theme-one-dark:#D19A66;--shiki-code-theme-material-light:#F76D47;--shiki-code-theme-material-dark:#F78C6C;--shiki-code-theme-min-light:#1976D2;--shiki-code-theme-min-dark:#F8F8F8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .code-theme-vitesse-light .shiki span {color: var(--shiki-code-theme-vitesse-light);background: var(--shiki-code-theme-vitesse-light-bg);font-style: var(--shiki-code-theme-vitesse-light-font-style);font-weight: var(--shiki-code-theme-vitesse-light-font-weight);text-decoration: var(--shiki-code-theme-vitesse-light-text-decoration);}html.code-theme-vitesse-light .shiki span {color: var(--shiki-code-theme-vitesse-light);background: var(--shiki-code-theme-vitesse-light-bg);font-style: var(--shiki-code-theme-vitesse-light-font-style);font-weight: var(--shiki-code-theme-vitesse-light-font-weight);text-decoration: var(--shiki-code-theme-vitesse-light-text-decoration);}html .code-theme-vitesse-dark .shiki span {color: var(--shiki-code-theme-vitesse-dark);background: var(--shiki-code-theme-vitesse-dark-bg);font-style: var(--shiki-code-theme-vitesse-dark-font-style);font-weight: var(--shiki-code-theme-vitesse-dark-font-weight);text-decoration: var(--shiki-code-theme-vitesse-dark-text-decoration);}html.code-theme-vitesse-dark .shiki span {color: var(--shiki-code-theme-vitesse-dark);background: var(--shiki-code-theme-vitesse-dark-bg);font-style: var(--shiki-code-theme-vitesse-dark-font-style);font-weight: var(--shiki-code-theme-vitesse-dark-font-weight);text-decoration: var(--shiki-code-theme-vitesse-dark-text-decoration);}html .code-theme-catppuccin-light .shiki span {color: var(--shiki-code-theme-catppuccin-light);background: var(--shiki-code-theme-catppuccin-light-bg);font-style: var(--shiki-code-theme-catppuccin-light-font-style);font-weight: var(--shiki-code-theme-catppuccin-light-font-weight);text-decoration: var(--shiki-code-theme-catppuccin-light-text-decoration);}html.code-theme-catppuccin-light .shiki span {color: var(--shiki-code-theme-catppuccin-light);background: var(--shiki-code-theme-catppuccin-light-bg);font-style: var(--shiki-code-theme-catppuccin-light-font-style);font-weight: var(--shiki-code-theme-catppuccin-light-font-weight);text-decoration: var(--shiki-code-theme-catppuccin-light-text-decoration);}html .code-theme-catppuccin-dark .shiki span {color: var(--shiki-code-theme-catppuccin-dark);background: var(--shiki-code-theme-catppuccin-dark-bg);font-style: var(--shiki-code-theme-catppuccin-dark-font-style);font-weight: var(--shiki-code-theme-catppuccin-dark-font-weight);text-decoration: var(--shiki-code-theme-catppuccin-dark-text-decoration);}html.code-theme-catppuccin-dark .shiki span {color: var(--shiki-code-theme-catppuccin-dark);background: var(--shiki-code-theme-catppuccin-dark-bg);font-style: var(--shiki-code-theme-catppuccin-dark-font-style);font-weight: var(--shiki-code-theme-catppuccin-dark-font-weight);text-decoration: var(--shiki-code-theme-catppuccin-dark-text-decoration);}html .code-theme-one-light .shiki span {color: var(--shiki-code-theme-one-light);background: var(--shiki-code-theme-one-light-bg);font-style: var(--shiki-code-theme-one-light-font-style);font-weight: var(--shiki-code-theme-one-light-font-weight);text-decoration: var(--shiki-code-theme-one-light-text-decoration);}html.code-theme-one-light .shiki span {color: var(--shiki-code-theme-one-light);background: var(--shiki-code-theme-one-light-bg);font-style: var(--shiki-code-theme-one-light-font-style);font-weight: var(--shiki-code-theme-one-light-font-weight);text-decoration: var(--shiki-code-theme-one-light-text-decoration);}html .code-theme-one-dark .shiki span {color: var(--shiki-code-theme-one-dark);background: var(--shiki-code-theme-one-dark-bg);font-style: var(--shiki-code-theme-one-dark-font-style);font-weight: var(--shiki-code-theme-one-dark-font-weight);text-decoration: var(--shiki-code-theme-one-dark-text-decoration);}html.code-theme-one-dark .shiki span {color: var(--shiki-code-theme-one-dark);background: var(--shiki-code-theme-one-dark-bg);font-style: var(--shiki-code-theme-one-dark-font-style);font-weight: var(--shiki-code-theme-one-dark-font-weight);text-decoration: var(--shiki-code-theme-one-dark-text-decoration);}html .code-theme-material-light .shiki span {color: var(--shiki-code-theme-material-light);background: var(--shiki-code-theme-material-light-bg);font-style: var(--shiki-code-theme-material-light-font-style);font-weight: var(--shiki-code-theme-material-light-font-weight);text-decoration: var(--shiki-code-theme-material-light-text-decoration);}html.code-theme-material-light .shiki span {color: var(--shiki-code-theme-material-light);background: var(--shiki-code-theme-material-light-bg);font-style: var(--shiki-code-theme-material-light-font-style);font-weight: var(--shiki-code-theme-material-light-font-weight);text-decoration: var(--shiki-code-theme-material-light-text-decoration);}html .code-theme-material-dark .shiki span {color: var(--shiki-code-theme-material-dark);background: var(--shiki-code-theme-material-dark-bg);font-style: var(--shiki-code-theme-material-dark-font-style);font-weight: var(--shiki-code-theme-material-dark-font-weight);text-decoration: var(--shiki-code-theme-material-dark-text-decoration);}html.code-theme-material-dark .shiki span {color: var(--shiki-code-theme-material-dark);background: var(--shiki-code-theme-material-dark-bg);font-style: var(--shiki-code-theme-material-dark-font-style);font-weight: var(--shiki-code-theme-material-dark-font-weight);text-decoration: var(--shiki-code-theme-material-dark-text-decoration);}html .code-theme-min-light .shiki span {color: var(--shiki-code-theme-min-light);background: var(--shiki-code-theme-min-light-bg);font-style: var(--shiki-code-theme-min-light-font-style);font-weight: var(--shiki-code-theme-min-light-font-weight);text-decoration: var(--shiki-code-theme-min-light-text-decoration);}html.code-theme-min-light .shiki span {color: var(--shiki-code-theme-min-light);background: var(--shiki-code-theme-min-light-bg);font-style: var(--shiki-code-theme-min-light-font-style);font-weight: var(--shiki-code-theme-min-light-font-weight);text-decoration: var(--shiki-code-theme-min-light-text-decoration);}html .code-theme-min-dark .shiki span {color: var(--shiki-code-theme-min-dark);background: var(--shiki-code-theme-min-dark-bg);font-style: var(--shiki-code-theme-min-dark-font-style);font-weight: var(--shiki-code-theme-min-dark-font-weight);text-decoration: var(--shiki-code-theme-min-dark-text-decoration);}html.code-theme-min-dark .shiki span {color: var(--shiki-code-theme-min-dark);background: var(--shiki-code-theme-min-dark-bg);font-style: var(--shiki-code-theme-min-dark-font-style);font-weight: var(--shiki-code-theme-min-dark-font-weight);text-decoration: var(--shiki-code-theme-min-dark-text-decoration);}",{"title":439,"searchDepth":743,"depth":743,"links":800},[801,802,803,809,810,811],{"id":427,"depth":743,"text":427},{"id":448,"depth":743,"text":448},{"id":466,"depth":743,"text":467,"children":804},[805,807,808],{"id":480,"depth":806,"text":480},3,{"id":517,"depth":806,"text":517},{"id":541,"depth":806,"text":541},{"id":615,"depth":743,"text":615},{"id":697,"depth":743,"text":698},{"id":767,"depth":743,"text":767},"了解原始回显、Excel 巡检报告、失败清单、端口台账和 SQLite 历史库。","md",{},{"icon":216},"---\ntitle: 报告与历史数据\ndescription: 了解原始回显、Excel 巡检报告、失败清单、端口台账和 SQLite 历史库。\nupdated: 2026-09-04\nnavigation:\n  icon: lucide:file-chart-column\n---\n\n## 输出目录结构\n\n每次运行按日期创建目录：\n\n```text\noutputs\u002F\n├── history.db\n└── YYYY-MM-DD\u002F\n    ├── raw\u002F       # 每台设备的原始命令回显\n    ├── reports\u002F   # 巡检汇总和失败设备 Excel\n    ├── queries\u002F   # ARP、MAC、端口查询结果\n    └── logs\u002F      # app.log 运行日志\n```\n\n同一天多次运行会复用日期目录，通过文件名中的时间戳区分报告和查询文件。每台设备的原始巡检回显文件名不包含时间戳，因此同一天再次巡检同名、同 IP 设备时会覆盖当天上一份原始回显。\n\n## 原始回显\n\n`raw\u002F` 中每台设备对应一个 TXT 文件，内容按命令分段：\n\n```text\n============================================================\n设备：核心交换机-S12704-3F-01\nIP：192.168.1.1\n命令：display version\n时间：2026-09-04 10:30:00\n============================================================\n\n\u003C设备原始回显>\n```\n\n程序会先保存原始数据，再进行汇总解析。即使部分命令执行失败或解析规则未识别新型号回显，也可以通过原始文件人工复核。\n\n## Excel 巡检汇总\n\n主报告文件名格式：\n\n```text\n巡检汇总_YYYY-MM-DD_HHMMSS.xlsx\n```\n\n### 巡检汇总工作表\n\n主要字段包括：\n\n- 巡检时间、设备名称、IP、厂商、型号、角色和位置；\n- 连接状态、设备主机名、软件版本和运行时间；\n- 板卡、电源、风扇和温度状态；\n- CPU、内存和磁盘使用率；\n- up\u002Fdown 接口数量和接口错误数量；\n- ARP、MAC 数量；\n- 重点接口状态、异常摘要和巡检结论；\n- 对应的原始回显文件路径。\n\n第一行自动加粗，工作表冻结首行并启用筛选。列宽会根据内容自动调整，最长限制为 60。\n\n### 失败设备工作表与文件\n\n存在连接失败设备时：\n\n- 主报告中增加“失败设备”工作表；\n- `reports\u002F` 中额外生成 `失败设备_YYYY-MM-DD_HHMMSS.xlsx`。\n\n失败记录会保留设备信息、友好错误原因和“异常”结论，便于二次处理。\n\n### 端口台账\n\n当 `display interface brief` 或对应命令成功解析出接口行时，报告会增加“端口台账”工作表，包含：\n\n| 字段 | 说明 |\n| --- | --- |\n| 设备名称 | `devices.yaml` 中的名称。 |\n| IP 地址 | 设备管理地址。 |\n| 端口 | 从 interface brief 回显中解析的接口名。 |\n| 链路状态 | `up` 或 `down`。 |\n\n普通 down 接口会进入数量和台账，但不会仅因为 down 就自动判定设备异常；只有配置为重点接口后，DOWN 才会直接影响结论。\n\n## 巡检结论\n\nExcel 中的结论使用颜色区分：\n\n| 结论 | 颜色 | 常见条件 |\n| --- | --- | --- |\n| 正常 | 浅绿色 | 未发现达到阈值的资源异常，设备状态正常，重点接口均为 UP。 |\n| 关注 | 浅黄色 | CPU\u002F内存超过关注阈值、接口存在错误计数、部分硬件状态未知或重点接口状态未知。 |\n| 异常 | 浅红色 | 连接失败、CPU\u002F内存达到严重阈值、板卡\u002F电源\u002F风扇\u002F温度异常或重点接口 DOWN。 |\n\n默认资源判断规则：\n\n- CPU 或内存大于 `80%`：关注。\n- CPU 或内存大于等于 `90%`：异常。\n\n阈值可以在 `config\u002Fsettings.yaml` 中调整。解析结论适合帮助筛选，不应替代对原始回显、设备告警和监控平台的综合判断。\n\n## SQLite 历史库\n\n启用 `db_enabled` 后，每次巡检结束都会把所有结果写入：\n\n```text\noutputs\u002Fhistory.db\n```\n\n数据库使用 SQLite，无需安装独立数据库服务。写入失败只记录警告，不会阻止 Excel 报告生成。\n\n使用 CLI 查看历史：\n\n```bash\npython cli.py trend\npython cli.py trend --host 192.168.1.1 --limit 50\n```\n\n## 数据保留与备份\n\n`outputs\u002F` 默认不提交 Git。生产使用时建议：\n\n- 根据巡检频率制定保留周期，避免原始回显和 Excel 长期占用磁盘。\n- 定期备份 `history.db`，备份前确保没有正在写入的巡检任务。\n- 原始回显可能包含 IP、MAC、VLAN、接口描述和网络拓扑线索，应按内部运维资料保护。\n- 分享 Excel 或 TXT 前先检查是否包含敏感信息。\n- 归档同一天多次巡检的原始回显时，应在再次运行前复制整个日期目录，避免同名文件覆盖。\n",{"title":213,"description":812},"2026-09-04","UFsjb6s7ybSYs3oIE2la5cQPXhjASt4k_dWWFZZC3Hs",[821,823],{"title":208,"path":209,"stem":210,"description":822,"icon":211,"children":-1},"使用 SwitchOps CLI 执行全量或单设备巡检、ARP\u002FMAC\u002F端口查询和历史趋势查看。",{"title":218,"path":219,"stem":220,"description":824,"icon":221,"children":-1},"调整 SwitchOps 的并发、重试、超时、告警阈值、输出位置和厂商命令模板。",1791307034134]