[{"content":"问题描述 故障现象： 访问 vSphere Client 的“vSAN 集群-配置-服务”页面时，弹出错误提示：error.query.coreApiMismatch: Failed to convert the QuerySpec to internal representation.\n伴随症状：\n无法提取 vSAN 服务内的存储器运行状况数据。 浏览器开发者工具（F12）显示多个指向 /wcp 或 /api 的请求返回 500 错误，报错信息为 AuthenticationException（认证异常）。 vCenter 概览界面显示证书状态警报。 根本原因分析 证书过期： 经查，vCenter 的计算机 SSL 证书（__MACHINE_CERT）已经过期。\n连锁反应： SSL 证书过期导致 vCenter 内部各微服务（如 vSAN Health、VAPI Endpoint）之间的信任链断裂。虽然用户仍旧可以登录 Web 界面，但 UI 后端在代用户请求 vSAN 数据时，因证书无效被拒绝认证。前端由于拿不到正确格式的数据，最终抛出 QuerySpec（查询规范）匹配失败的逻辑错误。\n解决方法 有两种方法解决：\n第一种：通过命令方式\n第二种：web界面操作\nSSH 开启 SSH 权限并使用底层工具修复 通过 vCenter DCUI (F2) 界面，进入 Troubleshooting Mode Options 开启 SSH 登录。 使用 SSH 登录到 vCenter，进入 shell 环境\n执行以下命令进入证书管理器：\n1 /usr/lib/vmware-vmca/bin/certificate-manager 在菜单中选择 3（Replace Machine SSL certificate with VMCA Certificate）。 输入管理员密码。 根据提示输入证书的具体信息（IP、位置、组织等，如无特殊需求直接回车用默认值即可）。 系统会自动重新签发这一张证书并重启受影响的服务。 Web 界面续订 如果 Web 后台还能正常操作，也可以登录 vCenter 管理后台（VAMI，通常为 https://\u0026lt;vCenter-IP\u0026gt;:5480 或 vSphere Client 证书管理页面）。 定位至 证书管理，找到过期的 __MACHINE_CERT，选择 续订 (Renew)。\n服务重启 续订操作触发后，vCenter 会自动重启所有核心服务（包括 vpxd, vsphere-ui, vsan-health 等）。此时 Web 页面会出现暂时性的连接中断，属于正常现象。\n清理与验证 待服务重启完成（通常需要 5-10 分钟），重新登录 vSphere Client。再次进入 vSAN 服务配置界面，确认数据已经恢复正常显示，警报消失。\n经验总结与建议 监控预警： 平时应多关注 vCenter 首页的“证书状态”警报，在过期前（通常提前 30 天就会开始有提示）及时执行续订。 业务影响： 续订证书并重启 vCenter 服务期间，完全不影响底层虚拟机（VM）的正常运行和 vSAN 数据的读写，它仅仅影响对集群的管理操作。 备份习惯： 执行任何证书操作前，务必对 vCenter 虚拟机进行 离线快照 备份，以防服务启动失败。 ","date":"2026-05-13T00:00:00Z","permalink":"/p/vcenter-cert-expired-vsan-error/","title":"vCenter 证书过期导致 vSAN 报错 QuerySpec 异常修复记录"},{"content":"公司域环境里，有些客户端计算机的本地 Administrator 账号密码为空或者是弱密码，不安全。打算用组策略统一改掉，同时把修改成功还是失败的结果自动追加到共享目录的日志文件里，方便统计。\n脚本准备与存放路径 脚本建议放在域控的 SYSVOL 共享目录下，这样客户端都能访问到： \\\\company.com\\SYSVOL\\company.com\\scripts\\\n这里准备了两个版本的批处理，按需选择：\n版本 A：基础版 每次开机都无脑执行一次,当然你也可以在计划任务中规定脚本的运行方式，次数。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @echo off setlocal set LOGFILE=\\\\192.168.1.250\\log\\admin_change.log set DATE=%date% %time% set PC=%COMPUTERNAME% REM 修改管理员密码 net user Administrator P@ssw0rd2026 \u0026gt;nul 2\u0026gt;\u0026amp;1 if %errorlevel%==0 ( echo %DATE% %PC% SUCCESS \u0026gt;\u0026gt; %LOGFILE% ) else ( echo %DATE% %PC% FAILED ERRORLEVEL=%errorlevel% \u0026gt;\u0026gt; %LOGFILE% ) endlocal exit /b 0 版本 B：升级版 通过注册表判断，执行过就不再执行，且有日志回写\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 @echo off setlocal set LOGFILE=\\\\192.168.1.250\\log\\admin_change.log set DATE=%date% %time% set PC=%COMPUTERNAME% REM 判断是否已经执行过 reg query HKLM\\Software\\AdminPwdFix /v Done \u0026gt;nul 2\u0026gt;\u0026amp;1 if %errorlevel%==0 ( echo %DATE% %PC% SKIPPED ALREADY_EXECUTED \u0026gt;\u0026gt; %LOGFILE% exit /b 0 ) REM 修改管理员密码，并把所有输出写入日志 net user Administrator P@ssw0rd2026 \u0026gt;\u0026gt; %LOGFILE% 2\u0026gt;\u0026amp;1 if %errorlevel%==0 ( echo %DATE% %PC% SUCCESS \u0026gt;\u0026gt; %LOGFILE% REM 写入执行标记 reg add HKLM\\Software\\AdminPwdFix /v Done /t REG_SZ /d 1 /f \u0026gt;nul 2\u0026gt;\u0026amp;1 ) else ( echo %DATE% %PC% FAILED ERRORLEVEL=%errorlevel% \u0026gt;\u0026gt; %LOGFILE% ) endlocal exit /b 0 日志文件权限设置 日志回写路径：\\\\192.168.1.250\\log\\ 注意： 这个共享文件夹必须确保开放了写入权限，否则客户端执行了脚本也拿不到回显日志。\n创建组策略（GPO） 打开组策略管理，新建一个 GPO： 进到 计算机配置 -\u0026gt; 首选项 -\u0026gt; 控制面板设置 -\u0026gt; 计划任务。 这里为了方便演示，直接用 即时任务（Immediate Task）。\n配置好后，把这个组策略链接到目标 OU 上。\n最终效果 当客户端计算机刷新组策略时，任务会自动触发执行，看一眼服务器上的日志，回写正常：\n拿新设置的密码去登录本地 Administrator 账号，测试登录成功。\n补充踩坑：如果被杀毒软件（如火绒）拦截怎么办？ 测试时发现，部分装了杀毒软件（如火绒）的终端会弹窗拦截这个批处理的动作。\n绕过拦截的解决办法： 那就不使用批处理文件，在组策略的“计划任务”里编辑刚刚的操作：\n程序/脚本 改写为：powershell.exe\n添加参数 填入以下整行命令：\n参数自行修改\n1 -NoProfile -ExecutionPolicy Bypass -Command \u0026#34;$pc=$env:COMPUTERNAME;$date=Get-Date -Format \u0026#39;yyyy-MM-dd HH:mm:ss\u0026#39;;$log=\u0026#39;\\\\192.168.1.250\\log\\admin_change.log\u0026#39;;try{$u=[ADSI]\u0026#39;WinNT://./Administrator,user\u0026#39;;$u.SetPassword(\u0026#39;P@ssw0rd2026\u0026#39;);$u.SetInfo();Add-Content $log \\\u0026#34;$date $pc SUCCESS\\\u0026#34;}catch{Add-Content $log \\\u0026#34;$date $pc FAILED $_\\\u0026#34;}\u0026#34; 复盘结论： 火绒等杀软主要盯着的是隐藏窗口执行的 PowerShell（比如带 -WindowStyle Hidden）或者是脚本链的连续调用（如 BAT 调 VBS，或者 BAT 再调 PS1）。 一旦执行链条太复杂或者带了敏感隐藏参数，就会触发杀软的行为防御。 而直接通过 PowerShell -Command 执行内联命令，并且不特意隐藏窗口，行为特征更接近管理员的日常正常操作，反而能完美避开拦截。\n","date":"2026-02-11T00:00:00Z","permalink":"/p/gpo-change-local-admpasswd/","title":"域环境下组策略统一修改终端本地管理员密码"},{"content":"前几天看浏览器地址栏提示，发现公司 Exchange 的证书快到期了。\n登进 Exchange ECP 后台（服务器 -\u0026gt; 证书）看了一眼，这里看到现在正在使用的证书即将到期。\n因为我们内网环境做了 Exchange 双机高可用，两台服务器都得搞一遍。顺手把这次踩坑和替换的流程记下来，免得明年换证书的时候又忘了。\n证书导入（两种方法挑一个就行） 把新申请下来的证书和私钥文件传到 Exchange 服务器上。\n导入证书有两种方法：\n第一种：MMC 控制台\n第二种：IIS 管理器\n方法一：MMC 控制台 在 Exchange 服务器上键盘按 Win + R 运行 mmc，调出控制台。 点击左上角 文件 -\u0026gt; 添加/删除管理单元。 左侧找到 证书，点击 添加。这时候会弹个窗，必须选“计算机账户”，然后一路下一步，选“本地计算机”点确定。 展开左侧的 证书(本地计算机) -\u0026gt; 个人 -\u0026gt; 证书，在空白处右键：所有任务 -\u0026gt; 导入。 把新证书文件选进来。这时候会让你输密码，直接打开那个 TXT 格式的私钥文件，把里面的文本全复制，粘到密码框里，点下一步。 存储路径直接选“根据证书类型自动选择”或者手动指定到“个人”都行，这里我选择放到个人。 方法二：IIS 管理器 如果不喜欢翻 MMC，也可以直接打开 IIS 管理器，点击左侧的服务器根节点，在中间找到 服务器证书。进去之后右侧直接有 导入 选项，把证书和私钥密码填进去就完事了。\n去 IIS 绑定新证书 证书进到系统里之后，得去 IIS 网站里生效。\n打开 IIS 管理器，左侧一路展开到 网站 -\u0026gt; Default Web Site。 点击右侧操作栏的 绑定。 选中 https (443端口) 那一行，点 编辑。 在最下面的 SSL 证书下拉菜单里，换成刚刚导入的那张新证书，点确定。 因为我们有两台 Exchange 做负载，另一台服务器也照着上面的步骤一模一样来一套。 换完去浏览器里刷新一下，点开地址栏的小锁头看一眼详细信息\n有效期已经延长\nExchange 服务分配 最后把证书跟服务对齐一下\n重新登回 Exchange ECP 管理中心 后台。 找到 服务器 -\u0026gt; 证书，双击你刚导入的那张新证书。 切换到 服务 选项卡。 把原来旧证书勾选的服务在新证书上也同样勾选。 点击保存。这时候系统会弹窗提示“是否替换现有的默认 SMTP 证书”，果断选“是”。 到这里，两台服务器的证书就彻底无缝切换完了。客户端测试了一圈收发信、OWA 登录。\n一切正常，下班！\n","date":"2026-01-15T00:00:00Z","permalink":"/p/exchange-ssl-certificate-replacement/","title":"Exchange Server 2016 更换 SSL 证书"},{"content":"H3C 交换机自动化链路追踪 平时排查网络，最烦的就是找某个IP具体插在哪个接入交换机上。\n以前我的的方法：先登核心查ARP拿到MAC，再登下级交换机查MAC表，如果中间过好几层汇聚，得一台一台登过去翻，手敲命令敲到手酸。\n索性用Python写了个自动化脚本。现在只要输入终端IP，它自己顺着网线（LLDP邻居）一路往下摸，直接把最末端的接入交换机IP和具体端口吐出来。\n环境：核心交换机是 S6520X-54QC-EI，接入交换机是 S5024PV5-EI\n脚本逻辑 这个脚本的整体思路可以用四个字概括：“顺藤摸瓜”。它模拟了网络工程师手工排查的步骤，并将其自动化。\n步骤一：去核心交换机拿第一条线索 程序启动后，你输入一个终端 IP。脚本第一件事是登录到核心交换机（192.168.8.1）上敲下 display arp。 核心交换机会返回两条关键信息：\n知道了这个 IP 对应的 MAC 地址。 知道了这个 MAC 地址是从核心交换机的哪个端口跑出去的。 步骤二：开启主循环向下追查 拿到初始端口后，脚本开始进入循环追踪阶段，这里对核心和后续交换机做了区分：\n在核心交换机上： 直接使用刚刚 ARP 查出来的端口，不再查核心的 MAC 表（因为核心做三层转发，MAC 表可能刷新不及时导致不准）。 在后续交换机上： 脚本会登录到当前交换机敲 display mac-address，看看这个终端 MAC 地址目前落在哪一个端口上。 步骤三：遇到聚合口（BAGG）自动拆分 无论是核心还是下级交换机，查出来的端口如果是个链路聚合口（以 BAGG 开头），脚本就会自动执行 display link-aggregation verbose。它会把聚合口里包含的物理小端口（比如 GE1/0/1）全部捞出来，因为后面的 LLDP 邻居信息是记录在物理端口上的。如果只是普通单口，就直接使用该接口。\n步骤四：通过 LLDP 探测对面是谁 拿到端口（或聚合口的物理成员口）后，脚本会去查 LLDP 邻居信息（display lldp neighbor-information list）。通过邻居表，看看这个端口对面接的是哪台交换机，并从对端设备名称（Sysname）里通过正则匹配出它的管理 IP。\n步骤五：判定终点 如果找到了下一跳交换机 IP： 说明还没到底，脚本会把这个 IP 传给下一次循环，自动登录到这台新交换机上，重复前面的查 MAC 流程。 如果查不到任何 LLDP 邻居了： 这意味着该端口对面连接的不再是交换机，而是最终的电脑终端。这时候，当前登录的这台交换机就是接入层交换机，对应的端口就是目标物理端口。脚本打印出定位结果，结束运行。 完整脚本源码 本脚本基于 Python 的 paramiko 库实现 SSH 自动化控制，通过正则表达式解析交换机回显内容。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 import re import paramiko def ssh_execute(ip, user, pwd, cmd): \u0026#34;\u0026#34;\u0026#34;统一的 SSH 命令执行函数\u0026#34;\u0026#34;\u0026#34; try: client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(ip, 22, username=user, password=pwd, timeout=5) stdin, stdout, stderr = client.exec_command(cmd) output = stdout.read().decode() client.close() return output except Exception as e: print(f\u0026#34;SSH 连接失败：{e}\u0026#34;) return \u0026#34;\u0026#34; def format_mac_with_dash(mac): \u0026#34;\u0026#34;\u0026#34;统一 MAC 地址格式为 xxxx-xxxx-xxxx\u0026#34;\u0026#34;\u0026#34; mac = mac.lower().replace(\u0026#34;-\u0026#34;, \u0026#34;\u0026#34;).replace(\u0026#34;:\u0026#34;, \u0026#34;\u0026#34;) if len(mac) != 12: return mac return f\u0026#34;{mac[0:4]}-{mac[4:8]}-{mac[8:12]}\u0026#34; def get_arp_info(ip, user, pwd, target_ip): \u0026#34;\u0026#34;\u0026#34;在核心交换机上通过 ARP 查找 MAC 和初始出口\u0026#34;\u0026#34;\u0026#34; output = ssh_execute(ip, user, pwd, f\u0026#34;display arp | include {target_ip}\u0026#34;) if not output.strip(): print(\u0026#34;未找到 ARP 记录\u0026#34;) return None, None for line in output.splitlines(): line = line.strip() if not re.match(r\u0026#34;^\\d\u0026#34;, line): continue parts = line.split() if len(parts) \u0026lt; 6: continue if not re.match(r\u0026#34;^[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}$\u0026#34;, parts[1]): continue raw_mac = parts[1] mac = format_mac_with_dash(raw_mac) interface = parts[3] return mac, interface print(\u0026#34;未找到有效 ARP 行\u0026#34;) return None, None def get_mac_interface(sw_ip, user, pwd, mac): \u0026#34;\u0026#34;\u0026#34;在非核心交换机上查询 MAC 地址表定位端口\u0026#34;\u0026#34;\u0026#34; output = ssh_execute(sw_ip, user, pwd, f\u0026#34;display mac-address | include {mac}\u0026#34;) for line in output.splitlines(): line = line.strip() parts = line.split() if len(parts) \u0026gt;= 4 and mac in parts[0]: return parts[3] return None def get_bagg_members(sw_ip, user, pwd, bagg): \u0026#34;\u0026#34;\u0026#34;当接口为动态聚合口(BAGG)时，解析出其含有的物理成员端口\u0026#34;\u0026#34;\u0026#34; bagg_id = bagg.replace(\u0026#34;BAGG\u0026#34;, \u0026#34;\u0026#34;) cmd = f\u0026#34;display link-aggregation verbose Bridge-Aggregation {bagg_id}\u0026#34; output = ssh_execute(sw_ip, user, pwd, cmd) members = [] for line in output.splitlines(): line = line.strip() m = re.match(r\u0026#34;^(X?GE\\d+/\\d+/\\d+)\u0026#34;, line) if m: members.append(m.group(1)) return members def find_lldp_neighbor(sw_ip, user, pwd, interfaces): \u0026#34;\u0026#34;\u0026#34;通过 LLDP 邻居信息查找下一跳交换机的管理 IP\u0026#34;\u0026#34;\u0026#34; output = ssh_execute(sw_ip, user, pwd, \u0026#34;display lldp neighbor-information list\u0026#34;) for line in output.splitlines(): line = line.strip() m = re.match(r\u0026#34;^(X?GE\\d+/\\d+/\\d+)\\s+[0-9a-fA-F\\-]+\\s+\\S+\\s+(.+)$\u0026#34;, line) if m: local_if = m.group(1) sysname = m.group(2).strip() if local_if in interfaces: # 假设交换机命名规范中自带 IP 尾数，如 SW-8.56 ip_match = re.search(r\u0026#34;8\\.(\\d+)\u0026#34;, sysname) if ip_match: next_ip = f\u0026#34;192.168.8.{ip_match.group(1)}\u0026#34; return sysname, next_ip return None, None def trace_path(sw_ip, user, pwd, mac, terminal_ip, core_interface): \u0026#34;\u0026#34;\u0026#34;链路追踪的核心主循环流程\u0026#34;\u0026#34;\u0026#34; CORE_IP = \u0026#34;192.168.8.1\u0026#34; while True: print(f\u0026#34;\\n正在 {sw_ip} 上查询路径...\u0026#34;) # 1. 核心交换机直接采用初始 ARP 端口，避免三层 MAC 表不准的问题 if sw_ip == CORE_IP: interface = core_interface if interface.upper().startswith(\u0026#34;BAGG\u0026#34;): members = get_bagg_members(sw_ip, user, pwd, interface) else: members = [interface] sysname, next_ip = find_lldp_neighbor(sw_ip, user, pwd, members) else: # 2. 非核心交换机则正常查找 MAC 地址表 interface = get_mac_interface(sw_ip, user, pwd, mac) if not interface: print(\u0026#34;当前交换机未发现该 MAC 地址\u0026#34;) return if interface.upper().startswith(\u0026#34;BAGG\u0026#34;): members = get_bagg_members(sw_ip, user, pwd, interface) else: members = [interface] sysname, next_ip = find_lldp_neighbor(sw_ip, user, pwd, members) # 3. 如果找不到 LLDP 邻居，说明已经到达接入层末端 if not next_ip: print(\u0026#34;\\n最终定位结果：\u0026#34;) print(f\u0026#34;终端 IP：{terminal_ip}\u0026#34;) print(f\u0026#34;终端 MAC：{mac}\u0026#34;) print(f\u0026#34;接入层交换机 IP：{sw_ip}\u0026#34;) print(f\u0026#34;接入层具体端口：{interface}\u0026#34;) return # 4. 将下一跳 IP 赋给 sw_ip，进入下一次循环 sw_ip = next_ip if __name__ == \u0026#34;__main__\u0026#34;: core_ip = \u0026#34;192.168.8.1\u0026#34; username = \u0026#34;admin\u0026#34; password = \u0026#34;maifeng2021\u0026#34; target_ip = input(\u0026#34;请输入想查询的终端 IP：\u0026#34;).strip() mac, interface = get_arp_info(core_ip, username, password, target_ip) if mac and interface: print(f\u0026#34;\\n初始查询成功：MAC 是 {mac}，核心出口是 {interface}\u0026#34;) trace_path(core_ip, username, password, mac, target_ip, interface) input(\u0026#39;\\n查询结束，按回车键退出。\u0026#39;) ","date":"2025-12-01T00:00:00Z","permalink":"/p/h3c-switch-python-lldp-trace/","title":"H3C 交换机自动链路追踪脚本：一键定位终端 IP 所在接入端口"},{"content":"每次登录交换机看日志，因为没有进行时间同步，那个时间看的我真是难受，今天把 H3C 交换机同步到了内网的 NTP 服务器上，顺便记录一下怎么解决“本地时钟（LOCAL）抢主备”的坑。\n1. 标准配置三部曲 登录到交换机，直接开搞：\n1 2 3 4 5 6 7 8 # 1. 开启 NTP 服务 [access-8.101]ntp-service enable # 2. 告诉系统：以后时钟由 NTP 协议说了算 [access-8.101]clock protocol ntp # 3. 指定内网的 NTP 服务器 IP [access-8.101]ntp-service unicast-server 192.168.13.10 2. 检查同步状态 配置后，等个一两分钟，查一下会话建立起来没有：\n1 2 3 4 5 6 [access-8.101]dis ntp-service sessions source reference stra reach poll now offset delay disper ******************************************************************************** [12345]192.168.13.10 203.107.6.88 3 127 64 44 0.8777 2.4414 4.9591 Notes: 1 source(master), 2 source(peer), 3 selected, 4 candidate, 5 configured. Total sessions: 1 看到最前面的状态包含 [12345] 里的 3（selected），说明会话已经搭上了。\n再确认一下时钟有没有真正同步成功：\n1 2 3 4 5 [access-8.101]dis ntp-service status Clock status: synchronized Clock stratum: 4 System peer: 192.168.13.10 ... Clock status 变成 synchronized 就代表同步过了。\n最后看一眼时间对不对，时区是不是北京时间（+08:00）：\n1 2 3 [access-8.101]dis clock 14:04:30.727 beijing Mon 10/27/2025 Time Zone : beijing add 08:00:00 3. 踩坑：本地时钟抢占主备怎么办？ 在配第二台交换机（8.102）的时候遇到了个小状况。敲完命令查会话，发现新配的 NTP 服务器被挤到一边去了（变成了状态 2 和 4），本地时钟反而成了 Master：\n1 2 3 4 5 [access-8.102]dis ntp-service sessions source reference stra reach poll now offset delay disper ******************************************************************************** [245]192.168.13.10 203.107.6.88 3 1 64 8 214748 2.5482 0.0000 [12345]LOCAL(0) LOCL 0 255 64 5 0.0000 0.0000 0.9155 看上面，LOCAL(0) 霸占了 1（master）的位置。导致配置的NTP服务器成了备用时钟了。\n解决办法很简单，把本地主时钟给卸了：\n1 [access-8.102]undo ntp-service refclock-master 把它干掉之后，稍微等会儿重新查一下会话：\n1 2 3 4 [access-8.102]dis ntp-service sessions source reference stra reach poll now offset delay disper ******************************************************************************** [12345]192.168.13.10 203.107.6.88 3 7 64 9 0.9052 2.4414 0.8850 这就对了嘛！LOCAL(0) 消失了，真正的 NTP 服务器成功上位（变成了 1 状态），搞定收工。\n","date":"2025-10-27T00:00:00Z","permalink":"/p/h3c-switch-ntp-config/","title":"H3C 交换机配置 NTP 时间同步"},{"content":"通过组策略（Group Policy）实现企业无线网络的精细化管控，确保只有经过授权的计算机才能接入内部 WiFi 网络。\n整体流程概览 步骤 操作 内容 1 创建无线网络策略（GPO） 计算机配置 → 安全设置 → 无线网络策略 2 配置网络权限 设置访问控制条件 3 创建 AD 安全组 用于存放已授权的计算机账户 4 新建授权策略并关联安全组 安全筛选器中关联安全组 5 日常维护 将申请通过的计算机加入安全组 详细配置步骤 创建无线网络安全策略 路径： 计算机配置 → 策略 → Windows 设置 → 安全设置 → 无线网络（IEEE 802.11）策略\n在右侧空白处右键，选择「创建一个新的 Windows Vista 策略」（适用于 Windows 7/8/10/11）\n若环境中有 Windows XP 设备，需额外创建「Windows XP 策略」\n配置网络权限 在创建的策略中勾选参数：\n防止连接到临时网络 防止连接到结构网络 允许用户查看被拒绝的网络 根据自己的需求勾选\n创建 AD 安全组 用于放置申请权限的计算机\n路径： Active Directory 用户和计算机 → 选择OU → 右键新建 → 安全组\n配置项：\n组作用域： 本地域或全局 组类型： 安全组 命名： GPO-允许-无线WIFI 新建授权策略 回到组策略管理，再创建一条新的无线网络策略，专门用于定义「允许连接哪些 WiFi」。\n在策略属性的「安全筛选」中，选择刚才创建的安全组：\n日常权限管理 后续有计算机需要接入 WiFi时，只需将该计算机账户添加到对应的安全组中，组策略会自动在下一次刷新时生效，或重启电脑生效。\n强制策略生效 配置完成后，需在客户端执行以下命令刷新策略：\n1 gpupdate /force 成功提示： 「计算机策略更新成功完成」\n可通过以下路径验证： 控制面板 → 网络和 Internet → 网络和共享中心 → 管理无线网络\n应能看到系统级配置文件，且状态为「系统」而非「用户」。\n常见问题排查 强制刷新策略后还是无法连接WIFI？ 请重启计算机\n通过以上方案，可实现未经授权的计算机无法连接内网 WiFi，同时通过安全组管理简化日常运维工作。\n","date":"2025-10-04T00:00:00Z","image":"/p/wifi-control/1.png","permalink":"/p/wifi-control/","title":"计算机无线网络连接管控方案"},{"content":"在实际网络运维中，当需要定位某台终端设备连接在网络的哪个交换机端口时，可以按照以下步骤进行追踪。\n通过IP查找MAC 登录核心交换机，执行以下命令查看目标IP对应的MAC地址：\n1 \u0026lt;core-8.1\u0026gt; dis arp all | in 192.168.22.149 输出结果：\n1 192.168.22.149 782b-cbb8-b62f 22 BAGG12 363 D 由此可知：\nIP地址 192.168.22.149 对应的MAC地址为 782b-cbb8-b62f 下联口是 BAGG12 聚合端口 查看聚合端口成员 聚合端口是由多个物理端口绑定而成的逻辑端口，需要查看其成员构成：\n1 \u0026lt;core-8.1\u0026gt; dis link-aggregation verbose Bridge-Aggregation 12 查看结果： 聚合端口 BAGG12 的成员端口为 1/0/20 和 2/0/20。\n确定下游交换机 通过LLDP协议查看邻居设备信息，确定上游端口连接的下游交换机：\n1 \u0026lt;core-8.1\u0026gt; dis lldp neighbor-information list 分析结果： 接口 1/0/20 和 2/0/20 连接的下游交换机名称为 8.12。\n接下来需要登录交换机 8.12，继续往下查找。\n定位目标端口 在边缘交换机上通过MAC地址查找最终连接的端口：\n1 \u0026lt;access-8.103\u0026gt; dis mac-address | include 782b-cbb8-b62f 最终结果： 目标设备连接在边缘交换机的 G1/0/13 端口。\n小贴士： 如果 MAC Address 显示为 Learned，且类型为 dot1x，说明该端口开启了802.1x准入认证。\n","date":"2025-09-26T00:00:00Z","image":"/p/ip-tracker/1.png","permalink":"/p/ip-tracker/","title":"从IP地址追踪设备所在交换机端口"},{"content":"前期工具准备 系统封装必备 zh-cn_windows_11_business_editions_version_23h2（win11系统镜像） EasySysprep（用来对系统进行部署和封装） EasyImageX2（多功能映像工具） 小鱼儿yr系统封装优化设置辅助工具（系统优化工具） 清理工具 软媒清理大师 运行库 DirectX_Repair GoRuntime_DirectX_9.0c GoRuntime_DotNetFramework_3.x GoRuntime_DotNetFramework_4.x GoRuntime_VCRedist 其他 微PE（要生成iso） 万能驱动（IT天空提供的） 一键安装注入Intel RST VMD快速存储驱动 准备环境 创建映射分区 新建一个 60-80G 的分区，主要用于存放以上准备的工具，后面会映射到虚拟机中。 创建虚拟机 我们编辑虚拟机设置，将 USB 控制器、声卡、打印机移除掉。（无图） 然后添加一个硬盘，映射我们前面创建的分区。 选择第一步划分出来的数据盘分区。 注意： 要让映射的磁盘成为永久独立磁盘，否则以后无法正常拍摄快照。设置为独立磁盘后，这个磁盘就不会被虚拟机的快照影响，也不会被拍进快照里。\n设置独立磁盘前，不能有任何快照存在。 如果已经拍摄了快照忘了设置独立磁盘，只能删除快照后再重新设置。 最后确认设置，虚拟机系统就配置好了。 虚拟机 BIOS 设置 右键虚拟机 - 电源 - 打开电源时进入固件。\n进入 Advanced 内 I/O Device Configuration 设置，全部改成 disabled。\n再进入到 Boot，调整光驱为第一启动项，硬盘为第二启动项。\n设置完成后 F10 保存并退出。\n虚拟机磁盘分区 上面 F10 保存退出后会重启，重启会通过第一启动项进入 CD（微PE）。进入 PE 后，用 DG 分区工具进行分区，我们已经将物理磁盘分区映射到虚拟机中了，这里分区不要选错，要选虚拟机的磁盘。\n分区后就能看到两个盘了，一个是虚拟机的磁盘，一个是映射进来的磁盘。\n安装母盘和优化清理 安装 win11 系统 安装一个原版的 win11 镜像，这里选择了 win11 专业版 23h2。\n安装后重启，按住 Ctrl + Shift + F3 进入审核模式。\n进入桌面后会弹出系统准备工具，每次重启它都会弹出来，关闭就行，也可以用辅助工具禁用掉。\n这里要把 administrator 账户启用，因为审核模式下默认是禁用，避免关机开机后无法登录进系统。\n关机，拍摄快照。\n使用辅助工具优化 打开小鱼儿辅助工具，系统优化这里需要优化什么，自己要清楚，要根据自己或者公司的场景去优化，我只简单的优化几项。\n安全隐私及系统更新相关优化：\n启用 SMB1 文件共享支持 禁用用户账户控制程序（UAC） 禁止获取技巧和建议 开始菜单、桌面及任务栏相关优化：\n隐藏 cortana 搜索框 隐藏任务视图按钮 禁止开始菜单显示建议 关闭任务栏的新闻资讯和天气 隐藏任务栏小组件 隐藏任务栏微软聊天应用图标 任务栏图标靠左对齐 然后进入系统清理，也是根据自己需求来清理。\n关机，拍摄快照。\n常用软件安装和设置 安装常用软件 office 办公套件、wps、输入法、谷歌浏览器、EDGE 浏览器、播放器，根据实际需求安装。如果有安装杀毒软件或者安全管家，建议在软件里面把 C:\\Sysprep 路径加白名单。\n万能驱动放置 可以提前将万能驱动放在 C 盘的 Sysprep 文件夹内。在 C 盘创建 Sysprep 文件夹，进去后再创建一个 EasyDrv7 文件夹，把万能驱动复制粘贴进去：C:\\Sysprep\\EasyDrv7\n安装运行库 用 DirectX_Repair 修复一下 dll，安装 net3.5（net4.5 系统自带了可以不装），其他红框勾选安装。\n关机，打快照。\n封装前优化清理 将桌面快捷图标转移公共桌面 将所有桌面快捷方式图标转移到公共桌面。如果重装系统后出现双图标，就是因为没有提前转移桌面快捷方式图标到公共桌面造成的。\n备份默认应用关联 检查一下你的默认应用关联，比如 mp4 有没有关联到对应播放器软件，PDF 格式，word，Excel 等等。例如 PDF 没有关联到 WPS，把他改成 WPS 打开。\n如果你想在重装系统后保持默认应用的设置不变，要用辅助工具来备份当前的应用关联设置。然后，在系统封装完成后，再用这个工具还原这些设置。这样，重装系统后你的默认应用关联就不会被改回去了。\n系统个性设置分为两部分：备份和还原。\n备份：在系统桌面中完成，在执行封装前进行。 还原：在 PE 系统中完成，在执行封装后、打包镜像前进行。 注意： 备份时用哪个文件夹里的辅助工具进行备份，还原时也必须用同一个文件夹里的辅助工具进行还原，否则无效。\n通常，正常安装的软件不需要备份哈希校验。只有绿色便携版软件设置了默认应用关联时，才需要备份哈希校验，否则重装系统后会丢失这些关联。这个教程没有设置绿色便携软件的默认应用，所以这里可以直接取消。\n清理垃圾 用软媒清理大师清理垃圾和系统使用痕迹。\n可以把 C 盘没有用的文件夹删掉，还有下载文件夹里面的程序，这个可以自己看着来，我就清理下垃圾和使用痕迹就行。\n备份系统个性设置 在封装系统时，有些设置会在重装系统后被还原。为了解决这个问题，可以使用辅助工具的系统个性设置备份和还原功能。\n系统个性设置分为两部分：备份和还原。\n备份：在 PE 系统中完成，在执行封装前进行。 还原：在 PE 系统中完成，在执行封装后、打包镜像前进行。 注意： 备份时用哪个文件夹里的辅助工具进行备份，还原时也必须用同一个文件夹里的辅助工具进行还原，否则无效。\n关机，打快照。\n开始封装 封装分两个阶段进行，第一阶段在桌面进行，第二阶段在 PE 里面进行。\n第一阶段设置 选择完成后退出，确定。\n我这里碰到了些意外，原因是因为一些软件影响的，我们根据提示打开 powershell (管理员)，直接粘贴回车。\n然后点确定会回到刚打开的界面，依次重来一遍，封装。\n这回顺利进行了，结束后我们手动重启电脑。\n注意： 这里第一阶段确定后，重启不能再进入桌面，进入桌面则封装失败。我们是要重启进入 PE，然后进行第二阶段封装。\n第二阶段设置 重启后进入 PE，打开封装工具进行第二阶段封装设置。\nOEM：注册信息关闭，OEM 信息关闭，LOGO 关闭，桌面壁纸关闭，锁屏壁纸关闭。这些东西你想设置也行，按需设置吧。WIN11 自带壁纸路径是在 C:\\Windows\\Web。 优化：这里也是按需勾选需要优化的项目，也可以不全选。 部署：计算机名、背景、按需设置，部署插件建议选择\u0026quot;简约部署环境\u0026quot;。万能驱动关掉，因为我们已经内置在 C 盘了，如果你是外置的话这里需要打开调用的。 系统： 用户：这里用的是 administrator 封装，重装后也是 administrator 登录，关闭创建新用户，打开 administrator，勾选避免产生 .xxx 目录，不勾选自动登录。 网络：按需设置，我这里都关闭了。 任务：这里用来创建任务部署中运行 C 盘的万能驱动。 进桌面删除 sysprep 文件夹： 也可以创建部署后运行激活工具静默方式等，这里我只创建了两个任务：运行万能驱动和删文件夹。 其他：不勾选保存映像，点保存，完成后退出确定。 封装结束调整系统 还原个性设置和默认应用关联 打开辅助工具，进入原创工具，个人设置与应用备份还原，点还原确定。\n注入存储驱动 Intel 第 11 代笔记本电脑通常默认使用 RAID 模式存储。为了防止重装系统时出现蓝屏，需要提前安装相应的驱动程序。打开\u0026quot;一键安装注入 Intel RST VMD 快速存储驱动\u0026quot;工具，离线系统注入，选择 C 盘确定。\n关机，打快照。\n打包镜像 打开 EasyImageX2 软件，分区备份，选择 C 盘，新建映像文件。\n选择保存的位置，保存。\n然后点一键备份。\n映像描述随便写，确定。\n正在备份中。\n到这里就结束了，后面写一下如何将多个镜像合成一个。\n多镜像合一 例如你准备做另一版镜像，已经做到打包镜像这一步，一样是打开 EasyImageX2 软件，分区备份，选择要打包的分区 C 盘，新建映像文件，选之前已经打包好的映像。\nEasyImageX2 会从\u0026quot;新建映像\u0026quot;变成\u0026quot;追加映像\u0026quot;，一键备份，然后填写描述确认。\n等待备份结束，然后你新做的这一版镜像就会追加到之前做的那一版中。\n安装的时候只要点一个镜像文件就会弹出多个映像选择。打开 Dism++，选择本地系统，工具箱，imagex 功能，浏览选择打包好的镜像文件。\n把两个映像都编辑一下，改一下显示名称和映像名称，改成一样吧。\n效果如下图：\n","date":"2024-11-29T00:00:00Z","image":"/p/win11-pack/3.22.png","permalink":"/p/win11-pack/","title":"Windows 11 企业级系统封装全流程与多镜像合一图文指南"}]