WinRM 远程运维 Windows 服务器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_4c293371/winrm-windows-remote。
技能介绍
解决什么问题
内网里的 Windows 服务器没有好用的自动化通道:RDP 是交互式的,脚本驱动很别扭;SMB 传文件要先配共享。WinRM 虽然是 Windows 原生的远程管理协议,但手工配置 winrm quickconfig、再写一堆 PSRemoting 引导代码,对只是想跑个命令、传个文件的场景来说太重了。
这个技能把 WinRM 封装成脚本里的一次调用,让自动化脚本像操作本机一样操作 Windows 机器。
工作原理与核心能力
- 凭据不写死:服务器信息保存在本机
scripts/config.json,首次使用时交互式收集;临时换机器可用环境变量WINRM_HOST、WINRM_USER、WINRM_PASSWORD覆盖,无需改配置。 - 三步工作流:先做连通性自检(打印远端主机名/系统/时间);再执行命令;最后传文件。
- PowerShell 一律先写成
.ps1文件再交给执行器,避免 bash 吞掉$变量。脚本以 UTF-16LE 编码传输,中文路径和中文输出不会乱码;输出末尾的RC=0表示成功,stderr 里的 CLIXML 进度噪声已自动过滤。 - 文件传输:多文件先 zip 打包 push 上去,再执行
Expand-Archive解压;大文件下载的变通做法见reference.md。 - 附带常用操作速查:按端口查占用、按 PID 杀进程、用计划任务跑长任务并轮询结果、
Get-Content -Tail看日志尾部。
目标机器只需做一次前置配置(管理员执行 winrm quickconfig、防火墙放行 5985/TCP)。
适用边界与注意事项
config.json里是明文密码,仅限本机内网使用;分享技能前务必先删掉它。- WinRM 走 HTTP 明文 + NTLM,只在内网用,不要把 5985 暴露到公网。
- WinRM 本身有机制上的坑:单条命令约 11.5KB 上限、会话可能被 job-object 回收、PS 5.1 的 TLS/编码问题等,全部对策记录在
reference.md,动手前建议先读。 - 杀进程只认端口查到的 PID,不要按进程名批量 kill —— 容易误伤同名单的其他进程。
使用场景
- 批量核查几十台内网 Windows 服务器的系统版本、主机名与当前时间,先跑连通性自检筛掉不可达机器
- 排查某台服务器的端口占用:查 3201 端口的 PID,确认后按 PID Stop-Process 而不是按进程名批量杀
- 把打包好的补丁 zip push 到远端,用 run_remote.py 执行 Expand-Archive 解压,路径含中文也不乱码
- 研发机临时连另一台 WinRM 服务器发命令,用环境变量覆盖 WINRM_HOST/WINRM_USER/WINRM_PASSWORD,不动 config.json
适合人员
- 运维工程师:要在无人值守脚本里批量跑命令、传文件、查状态,不想给每台机器手写 PSRemoting 引导
- SRE / 自动化开发:CI 流水线里需要连内网 Windows 机器部署或拉日志,依赖 pywinrm、错误码与编码可预期
- 基础设施负责人:要在内网维护几十台 Windows Server 资产,关心安全边界和 WinRM 的机制坑
- 临时接手排障的工程师:不熟悉目标机环境,需要快速连通自检并按端口定位进程