[{"data":1,"prerenderedAt":1234},["ShallowReactive",2],{"navigation":3,"blogNavigation":232,"page-\u002Fdocs\u002Fswitchops%E4%BA%A4%E6%8D%A2%E6%9C%BA%E5%B7%A1%E6%A3%80\u002Fcli-guide":418,"\u002Fdocs\u002Fswitchops%E4%BA%A4%E6%8D%A2%E6%9C%BA%E5%B7%A1%E6%A3%80\u002Fcli-guide-surround":1229},[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":208,"badges":420,"body":421,"date":420,"description":1221,"draft":57,"extension":1222,"fullpage":57,"icon":420,"links":420,"meta":1223,"navBadges":420,"navigation":1224,"path":209,"rawbody":1225,"seo":1226,"stem":210,"updated":1227,"__hash__":1228},"docs\u002Fdocs\u002F3.SwitchOps交换机巡检\u002F5.cli-guide.md",null,{"type":422,"value":423,"toc":1203},"minimark",[424,428,437,447,450,510,513,517,536,547,551,587,590,628,642,645,703,706,710,742,745,787,791,823,826,866,869,911,922,925,989,996,999,1005,1008,1022,1025,1043,1046,1069,1072,1108,1111,1114,1169,1172,1175,1192,1199],[425,426,427],"h2",{"id":427},"命令结构",[429,430,431,432,436],"p",{},"CLI 入口为 ",[433,434,435],"code",{},"cli.py","，包含三个主命令：",[438,439,445],"pre",{"className":440,"code":442,"language":443,"meta":444},[441],"language-text","python cli.py inspect ...\npython cli.py query ...\npython cli.py trend ...\n","text","",[433,446,442],{"__ignoreMap":444},[429,448,449],{},"查看内置帮助：",[438,451,455],{"className":452,"code":453,"language":454,"meta":444,"style":444},"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 --help\npython cli.py inspect --help\npython cli.py query --help\npython cli.py trend --help\n","bash",[433,456,457,474,486,498],{"__ignoreMap":444},[458,459,462,466,470],"span",{"class":460,"line":461},"line",1,[458,463,465],{"class":464},"sCf0g","python",[458,467,469],{"class":468},"s254i"," cli.py",[458,471,473],{"class":472},"scmvv"," --help\n",[458,475,477,479,481,484],{"class":460,"line":476},2,[458,478,465],{"class":464},[458,480,469],{"class":468},[458,482,483],{"class":468}," inspect",[458,485,473],{"class":472},[458,487,489,491,493,496],{"class":460,"line":488},3,[458,490,465],{"class":464},[458,492,469],{"class":468},[458,494,495],{"class":468}," query",[458,497,473],{"class":472},[458,499,501,503,505,508],{"class":460,"line":500},4,[458,502,465],{"class":464},[458,504,469],{"class":468},[458,506,507],{"class":468}," trend",[458,509,473],{"class":472},[425,511,512],{"id":512},"执行巡检",[514,515,516],"h3",{"id":516},"全量巡检",[438,518,520],{"className":452,"code":519,"language":454,"meta":444,"style":444},"python cli.py inspect --config config\u002Fdevices.yaml\n",[433,521,522],{"__ignoreMap":444},[458,523,524,526,528,530,533],{"class":460,"line":461},[458,525,465],{"class":464},[458,527,469],{"class":468},[458,529,483],{"class":468},[458,531,532],{"class":472}," --config",[458,534,535],{"class":468}," config\u002Fdevices.yaml\n",[429,537,538,539,542,543,546],{},"程序会加载所有设备，只巡检 ",[433,540,541],{},"enabled: true"," 的项目，并按照 ",[433,544,545],{},"settings.yaml"," 的并发和重试参数执行。",[514,548,550],{"id":549},"按-ip-巡检单台设备","按 IP 巡检单台设备",[438,552,554],{"className":452,"code":553,"language":454,"meta":444,"style":444},"python cli.py inspect \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1\n",[433,555,556,568,578],{"__ignoreMap":444},[458,557,558,560,562,564],{"class":460,"line":461},[458,559,465],{"class":464},[458,561,469],{"class":468},[458,563,483],{"class":468},[458,565,567],{"class":566},"sw7OJ"," \\\n",[458,569,570,573,576],{"class":460,"line":476},[458,571,572],{"class":472},"  --config",[458,574,575],{"class":468}," config\u002Fdevices.yaml",[458,577,567],{"class":566},[458,579,580,583],{"class":460,"line":488},[458,581,582],{"class":472},"  --target",[458,584,586],{"class":585},"s_Zq6"," 192.168.1.1\n",[514,588,589],{"id":589},"按设备名称巡检",[438,591,593],{"className":452,"code":592,"language":454,"meta":444,"style":444},"python cli.py inspect \\\n  --config config\u002Fdevices.yaml \\\n  --target \"核心交换机-S12704-3F-01\"\n",[433,594,595,605,613],{"__ignoreMap":444},[458,596,597,599,601,603],{"class":460,"line":461},[458,598,465],{"class":464},[458,600,469],{"class":468},[458,602,483],{"class":468},[458,604,567],{"class":566},[458,606,607,609,611],{"class":460,"line":476},[458,608,572],{"class":472},[458,610,575],{"class":468},[458,612,567],{"class":566},[458,614,615,617,621,625],{"class":460,"line":488},[458,616,582],{"class":472},[458,618,620],{"class":619},"sLXf0"," \"",[458,622,624],{"class":623},"sCtJb","核心交换机-S12704-3F-01",[458,626,627],{"class":619},"\"\n",[429,629,630,633,634,637,638,641],{},[433,631,632],{},"--target"," 必须与配置中的 ",[433,635,636],{},"host"," 或 ",[433,639,640],{},"name"," 完全一致。没有匹配到启用设备时，程序会提示“没有可巡检的启用设备”。",[514,643,644],{"id":644},"巡检参数",[646,647,648,667],"table",{},[649,650,651],"thead",{},[652,653,654,658,661,664],"tr",{},[655,656,657],"th",{},"参数",[655,659,660],{},"是否必填",[655,662,663],{},"默认值",[655,665,666],{},"说明",[668,669,670,689],"tbody",{},[652,671,672,678,681,686],{},[673,674,675],"td",{},[433,676,677],{},"--config",[673,679,680],{},"否",[673,682,683],{},[433,684,685],{},"config\u002Fdevices.yaml",[673,687,688],{},"设备清单路径。",[652,690,691,695,697,700],{},[673,692,693],{},[433,694,632],{},[673,696,680],{},[673,698,699],{},"空",[673,701,702],{},"按设备名称或 IP 精确筛选。",[429,704,705],{},"完成后终端会输出成功数、失败数、汇总报告路径，以及存在失败设备时的失败清单路径。",[425,707,709],{"id":708},"查询-arp","查询 ARP",[438,711,713],{"className":452,"code":712,"language":454,"meta":444,"style":444},"python cli.py query arp \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1\n",[433,714,715,728,736],{"__ignoreMap":444},[458,716,717,719,721,723,726],{"class":460,"line":461},[458,718,465],{"class":464},[458,720,469],{"class":468},[458,722,495],{"class":468},[458,724,725],{"class":468}," arp",[458,727,567],{"class":566},[458,729,730,732,734],{"class":460,"line":476},[458,731,572],{"class":472},[458,733,575],{"class":468},[458,735,567],{"class":566},[458,737,738,740],{"class":460,"line":488},[458,739,582],{"class":472},[458,741,586],{"class":585},[429,743,744],{},"按关键字过滤：",[438,746,748],{"className":452,"code":747,"language":454,"meta":444,"style":444},"python cli.py query arp \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1 \\\n  --keyword 10.10.20.15\n",[433,749,750,762,770,779],{"__ignoreMap":444},[458,751,752,754,756,758,760],{"class":460,"line":461},[458,753,465],{"class":464},[458,755,469],{"class":468},[458,757,495],{"class":468},[458,759,725],{"class":468},[458,761,567],{"class":566},[458,763,764,766,768],{"class":460,"line":476},[458,765,572],{"class":472},[458,767,575],{"class":468},[458,769,567],{"class":566},[458,771,772,774,777],{"class":460,"line":488},[458,773,582],{"class":472},[458,775,776],{"class":585}," 192.168.1.1",[458,778,567],{"class":566},[458,780,781,784],{"class":460,"line":500},[458,782,783],{"class":472},"  --keyword",[458,785,786],{"class":585}," 10.10.20.15\n",[425,788,790],{"id":789},"查询-mac-地址表","查询 MAC 地址表",[438,792,794],{"className":452,"code":793,"language":454,"meta":444,"style":444},"python cli.py query mac \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1\n",[433,795,796,809,817],{"__ignoreMap":444},[458,797,798,800,802,804,807],{"class":460,"line":461},[458,799,465],{"class":464},[458,801,469],{"class":468},[458,803,495],{"class":468},[458,805,806],{"class":468}," mac",[458,808,567],{"class":566},[458,810,811,813,815],{"class":460,"line":476},[458,812,572],{"class":472},[458,814,575],{"class":468},[458,816,567],{"class":566},[458,818,819,821],{"class":460,"line":488},[458,820,582],{"class":472},[458,822,586],{"class":585},[429,824,825],{},"按 VLAN 或接口过滤：",[438,827,829],{"className":452,"code":828,"language":454,"meta":444,"style":444},"python cli.py query mac \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1 \\\n  --keyword Vlan10\n",[433,830,831,843,851,859],{"__ignoreMap":444},[458,832,833,835,837,839,841],{"class":460,"line":461},[458,834,465],{"class":464},[458,836,469],{"class":468},[458,838,495],{"class":468},[458,840,806],{"class":468},[458,842,567],{"class":566},[458,844,845,847,849],{"class":460,"line":476},[458,846,572],{"class":472},[458,848,575],{"class":468},[458,850,567],{"class":566},[458,852,853,855,857],{"class":460,"line":488},[458,854,582],{"class":472},[458,856,776],{"class":585},[458,858,567],{"class":566},[458,860,861,863],{"class":460,"line":500},[458,862,783],{"class":472},[458,864,865],{"class":468}," Vlan10\n",[425,867,868],{"id":868},"查询接口",[438,870,872],{"className":452,"code":871,"language":454,"meta":444,"style":444},"python cli.py query interface \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1 \\\n  --interface GigabitEthernet2\u002F0\u002F7\n",[433,873,874,887,895,903],{"__ignoreMap":444},[458,875,876,878,880,882,885],{"class":460,"line":461},[458,877,465],{"class":464},[458,879,469],{"class":468},[458,881,495],{"class":468},[458,883,884],{"class":468}," interface",[458,886,567],{"class":566},[458,888,889,891,893],{"class":460,"line":476},[458,890,572],{"class":472},[458,892,575],{"class":468},[458,894,567],{"class":566},[458,896,897,899,901],{"class":460,"line":488},[458,898,582],{"class":472},[458,900,776],{"class":585},[458,902,567],{"class":566},[458,904,905,908],{"class":460,"line":500},[458,906,907],{"class":472},"  --interface",[458,909,910],{"class":468}," GigabitEthernet2\u002F0\u002F7\n",[429,912,913,914,917,918,921],{},"接口查询必须提供 ",[433,915,916],{},"--interface","。端口名会替换到厂商命令模板的 ",[433,919,920],{},"{interface}"," 占位符中。",[514,923,924],{"id":924},"查询参数",[646,926,927,937],{},[649,928,929],{},[652,930,931,933,935],{},[655,932,657],{},[655,934,660],{},[655,936,666],{},[668,938,939,953,965,977],{},[652,940,941,945,947],{},[673,942,943],{},[433,944,677],{},[673,946,680],{},[673,948,949,950,952],{},"设备清单路径，默认 ",[433,951,685],{},"。",[652,954,955,959,962],{},[673,956,957],{},[433,958,632],{},[673,960,961],{},"是",[673,963,964],{},"设备名称或 IP，必须精确匹配启用设备。",[652,966,967,972,974],{},[673,968,969],{},[433,970,971],{},"--keyword",[673,973,680],{},[673,975,976],{},"对返回结果进行不区分大小写的本地逐行过滤。",[652,978,979,983,986],{},[673,980,981],{},[433,982,916],{},[673,984,985],{},"接口查询必填",[673,987,988],{},"完整接口名称。",[429,990,991,992,995],{},"所有查询都会把终端显示的结果保存到当天的 ",[433,993,994],{},"outputs\u002FYYYY-MM-DD\u002Fqueries\u002F"," 目录。连接失败时也会保存一份包含友好错误信息的查询文件。",[425,997,998],{"id":998},"查看历史趋势",[429,1000,1001,1002,952],{},"先至少成功执行一次巡检，让程序生成 ",[433,1003,1004],{},"outputs\u002Fhistory.db",[429,1006,1007],{},"查看最近 20 条记录：",[438,1009,1011],{"className":452,"code":1010,"language":454,"meta":444,"style":444},"python cli.py trend\n",[433,1012,1013],{"__ignoreMap":444},[458,1014,1015,1017,1019],{"class":460,"line":461},[458,1016,465],{"class":464},[458,1018,469],{"class":468},[458,1020,1021],{"class":468}," trend\n",[429,1023,1024],{},"只看某台设备：",[438,1026,1028],{"className":452,"code":1027,"language":454,"meta":444,"style":444},"python cli.py trend --host 192.168.1.1\n",[433,1029,1030],{"__ignoreMap":444},[458,1031,1032,1034,1036,1038,1041],{"class":460,"line":461},[458,1033,465],{"class":464},[458,1035,469],{"class":468},[458,1037,507],{"class":468},[458,1039,1040],{"class":472}," --host",[458,1042,586],{"class":585},[429,1044,1045],{},"调整记录数量：",[438,1047,1049],{"className":452,"code":1048,"language":454,"meta":444,"style":444},"python cli.py trend --host 192.168.1.1 --limit 50\n",[433,1050,1051],{"__ignoreMap":444},[458,1052,1053,1055,1057,1059,1061,1063,1066],{"class":460,"line":461},[458,1054,465],{"class":464},[458,1056,469],{"class":468},[458,1058,507],{"class":468},[458,1060,1040],{"class":472},[458,1062,776],{"class":585},[458,1064,1065],{"class":472}," --limit",[458,1067,1068],{"class":585}," 50\n",[429,1070,1071],{},"读取其他数据库：",[438,1073,1075],{"className":452,"code":1074,"language":454,"meta":444,"style":444},"python cli.py trend --db D:\\SwitchOpsData\\history.db --limit 100\n",[433,1076,1077],{"__ignoreMap":444},[458,1078,1079,1081,1083,1085,1088,1091,1094,1097,1100,1103,1105],{"class":460,"line":461},[458,1080,465],{"class":464},[458,1082,469],{"class":468},[458,1084,507],{"class":468},[458,1086,1087],{"class":472}," --db",[458,1089,1090],{"class":468}," D:",[458,1092,1093],{"class":566},"\\S",[458,1095,1096],{"class":468},"witchOpsData",[458,1098,1099],{"class":566},"\\h",[458,1101,1102],{"class":468},"istory.db",[458,1104,1065],{"class":472},[458,1106,1107],{"class":585}," 100\n",[429,1109,1110],{},"趋势表显示：巡检时间、设备名称、IP、CPU、内存、接口 up\u002Fdown 数量、结论和异常摘要。",[514,1112,1113],{"id":1113},"趋势参数",[646,1115,1116,1126],{},[649,1117,1118],{},[652,1119,1120,1122,1124],{},[655,1121,657],{},[655,1123,663],{},[655,1125,666],{},[668,1127,1128,1142,1154],{},[652,1129,1130,1135,1139],{},[673,1131,1132],{},[433,1133,1134],{},"--db",[673,1136,1137],{},[433,1138,1004],{},[673,1140,1141],{},"SQLite 历史库路径。",[652,1143,1144,1149,1151],{},[673,1145,1146],{},[433,1147,1148],{},"--host",[673,1150,699],{},[673,1152,1153],{},"按设备 IP 精确过滤。",[652,1155,1156,1161,1166],{},[673,1157,1158],{},[433,1159,1160],{},"--limit",[673,1162,1163],{},[433,1164,1165],{},"20",[673,1167,1168],{},"最多显示的记录数。",[425,1170,1171],{"id":1171},"自动化调用建议",[429,1173,1174],{},"需要通过 Windows 任务计划程序或其他调度器定期运行时，可以调用：",[438,1176,1180],{"className":1177,"code":1178,"language":1179,"meta":444,"style":444},"language-powershell 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","Set-Location D:\\SwitchOps\n.\\.venv\\Scripts\\python.exe cli.py inspect --config config\\devices.yaml\n","powershell",[433,1181,1182,1187],{"__ignoreMap":444},[458,1183,1184],{"class":460,"line":461},[458,1185,1186],{},"Set-Location D:\\SwitchOps\n",[458,1188,1189],{"class":460,"line":476},[458,1190,1191],{},".\\.venv\\Scripts\\python.exe cli.py inspect --config config\\devices.yaml\n",[429,1193,1194,1195,1198],{},"调度账号必须具备读取配置、写入 ",[433,1196,1197],{},"outputs"," 和访问交换机管理网络的权限。定时任务上线前，应先手工执行相同命令验证工作目录和 Python 路径。",[1200,1201,1202],"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 .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);}html pre.shiki code .sw7OJ, html code.shiki .sw7OJ{--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:#EA76CB;--shiki-code-theme-catppuccin-dark:#F5C2E7;--shiki-code-theme-one-light:#0184BC;--shiki-code-theme-one-dark:#56B6C2;--shiki-code-theme-material-light:#90A4AE;--shiki-code-theme-material-dark:#BABED8;--shiki-code-theme-min-light:#24292EFF;--shiki-code-theme-min-dark:#B392F0}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 pre.shiki code .sLXf0, html code.shiki .sLXf0{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-code-theme-vitesse-light:#B5695977;--shiki-code-theme-vitesse-dark:#C98A7D77;--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:#39ADB5;--shiki-code-theme-material-dark:#89DDFF;--shiki-code-theme-min-light:#22863A;--shiki-code-theme-min-dark:#FFAB70}html pre.shiki code .sCtJb, html code.shiki .sCtJb{--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:#22863A;--shiki-code-theme-min-dark:#FFAB70}",{"title":444,"searchDepth":476,"depth":476,"links":1204},[1205,1206,1212,1213,1214,1217,1220],{"id":427,"depth":476,"text":427},{"id":512,"depth":476,"text":512,"children":1207},[1208,1209,1210,1211],{"id":516,"depth":488,"text":516},{"id":549,"depth":488,"text":550},{"id":589,"depth":488,"text":589},{"id":644,"depth":488,"text":644},{"id":708,"depth":476,"text":709},{"id":789,"depth":476,"text":790},{"id":868,"depth":476,"text":868,"children":1215},[1216],{"id":924,"depth":488,"text":924},{"id":998,"depth":476,"text":998,"children":1218},[1219],{"id":1113,"depth":488,"text":1113},{"id":1171,"depth":476,"text":1171},"使用 SwitchOps CLI 执行全量或单设备巡检、ARP\u002FMAC\u002F端口查询和历史趋势查看。","md",{},{"icon":211},"---\ntitle: 命令行使用\ndescription: 使用 SwitchOps CLI 执行全量或单设备巡检、ARP\u002FMAC\u002F端口查询和历史趋势查看。\nupdated: 2026-09-04\nnavigation:\n  icon: lucide:square-terminal\n---\n\n## 命令结构\n\nCLI 入口为 `cli.py`，包含三个主命令：\n\n```text\npython cli.py inspect ...\npython cli.py query ...\npython cli.py trend ...\n```\n\n查看内置帮助：\n\n```bash\npython cli.py --help\npython cli.py inspect --help\npython cli.py query --help\npython cli.py trend --help\n```\n\n## 执行巡检\n\n### 全量巡检\n\n```bash\npython cli.py inspect --config config\u002Fdevices.yaml\n```\n\n程序会加载所有设备，只巡检 `enabled: true` 的项目，并按照 `settings.yaml` 的并发和重试参数执行。\n\n### 按 IP 巡检单台设备\n\n```bash\npython cli.py inspect \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1\n```\n\n### 按设备名称巡检\n\n```bash\npython cli.py inspect \\\n  --config config\u002Fdevices.yaml \\\n  --target \"核心交换机-S12704-3F-01\"\n```\n\n`--target` 必须与配置中的 `host` 或 `name` 完全一致。没有匹配到启用设备时，程序会提示“没有可巡检的启用设备”。\n\n### 巡检参数\n\n| 参数 | 是否必填 | 默认值 | 说明 |\n| --- | --- | --- | --- |\n| `--config` | 否 | `config\u002Fdevices.yaml` | 设备清单路径。 |\n| `--target` | 否 | 空 | 按设备名称或 IP 精确筛选。 |\n\n完成后终端会输出成功数、失败数、汇总报告路径，以及存在失败设备时的失败清单路径。\n\n## 查询 ARP\n\n```bash\npython cli.py query arp \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1\n```\n\n按关键字过滤：\n\n```bash\npython cli.py query arp \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1 \\\n  --keyword 10.10.20.15\n```\n\n## 查询 MAC 地址表\n\n```bash\npython cli.py query mac \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1\n```\n\n按 VLAN 或接口过滤：\n\n```bash\npython cli.py query mac \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1 \\\n  --keyword Vlan10\n```\n\n## 查询接口\n\n```bash\npython cli.py query interface \\\n  --config config\u002Fdevices.yaml \\\n  --target 192.168.1.1 \\\n  --interface GigabitEthernet2\u002F0\u002F7\n```\n\n接口查询必须提供 `--interface`。端口名会替换到厂商命令模板的 `{interface}` 占位符中。\n\n### 查询参数\n\n| 参数 | 是否必填 | 说明 |\n| --- | --- | --- |\n| `--config` | 否 | 设备清单路径，默认 `config\u002Fdevices.yaml`。 |\n| `--target` | 是 | 设备名称或 IP，必须精确匹配启用设备。 |\n| `--keyword` | 否 | 对返回结果进行不区分大小写的本地逐行过滤。 |\n| `--interface` | 接口查询必填 | 完整接口名称。 |\n\n所有查询都会把终端显示的结果保存到当天的 `outputs\u002FYYYY-MM-DD\u002Fqueries\u002F` 目录。连接失败时也会保存一份包含友好错误信息的查询文件。\n\n## 查看历史趋势\n\n先至少成功执行一次巡检，让程序生成 `outputs\u002Fhistory.db`。\n\n查看最近 20 条记录：\n\n```bash\npython cli.py trend\n```\n\n只看某台设备：\n\n```bash\npython cli.py trend --host 192.168.1.1\n```\n\n调整记录数量：\n\n```bash\npython cli.py trend --host 192.168.1.1 --limit 50\n```\n\n读取其他数据库：\n\n```bash\npython cli.py trend --db D:\\SwitchOpsData\\history.db --limit 100\n```\n\n趋势表显示：巡检时间、设备名称、IP、CPU、内存、接口 up\u002Fdown 数量、结论和异常摘要。\n\n### 趋势参数\n\n| 参数 | 默认值 | 说明 |\n| --- | --- | --- |\n| `--db` | `outputs\u002Fhistory.db` | SQLite 历史库路径。 |\n| `--host` | 空 | 按设备 IP 精确过滤。 |\n| `--limit` | `20` | 最多显示的记录数。 |\n\n## 自动化调用建议\n\n需要通过 Windows 任务计划程序或其他调度器定期运行时，可以调用：\n\n```powershell\nSet-Location D:\\SwitchOps\n.\\.venv\\Scripts\\python.exe cli.py inspect --config config\\devices.yaml\n```\n\n调度账号必须具备读取配置、写入 `outputs` 和访问交换机管理网络的权限。定时任务上线前，应先手工执行相同命令验证工作目录和 Python 路径。\n",{"title":208,"description":1221},"2026-09-04","9o0nEyg5tA9mh1q9v9Ii6Hu2ZjHBTCZgu5KT9Kcvhwo",[1230,1232],{"title":203,"path":204,"stem":205,"description":1231,"icon":206,"children":-1},"使用 SwitchOps GUI 加载设备、批量巡检、查询 ARP\u002FMAC\u002F端口并查看输出。",{"title":213,"path":214,"stem":215,"description":1233,"icon":216,"children":-1},"了解原始回显、Excel 巡检报告、失败清单、端口台账和 SQLite 历史库。",1791307034021]