windows下批量换程序——运维常用

Windows 批量更新程序脚本:自动化替换与部署

在Windows服务器运维中,经常需要批量更新程序文件。手动操作不仅耗时,还容易出错。本文分享一个自动化脚本,通过FTP下载新程序、清理旧文件、替换程序并重启服务,实现一键式部署。配合Keeper等守护程序使用,可实现无人值守更新。

📌 脚本适用场景:

  • 多台Windows服务器需要同时更新同一套程序
  • 程序文件通过FTP集中分发
  • 需要清理旧日志和临时文件
  • 配合Keeper等守护进程实现自动拉起新进程

📜 一、完整脚本代码

将以下内容保存为 update.bat,以管理员身份运行:

@echo off
:: Windows 批量程序更新脚本
:: 作者:运维笔记
:: 日期:2015-04-16

echo [1/7] 关闭Windows防火墙服务...
net stop sharedaccess

echo [2/7] 清理旧日志和临时文件...
del /s d:\*.log d:\*.vbs d:\*.pdb d:\*.dmp 2>nul

echo [3/7] 切换到D盘目标目录...
D:
cd D:\Newsvr

echo [4/7] 连接FTP服务器下载新程序...
ftp -n 192.168.1.1 <<EOF
user admin admin
cd guoyabin
binary
get aaa2015-4-16.exe
get xxx2015-4-16.vbs
bye
EOF

echo [5/7] 复制程序到各个目标目录...
copy aaa2015-4-16.exe D:\Newsvr\aaa1 /Y
copy aaa2015-4-16.exe D:\Newsvr\aaa2 /Y
copy aaa2015-4-16.exe D:\Newsvr\aaa3 /Y
copy aaa2015-4-16.exe D:\Newsvr\aaa4 /Y

echo [6/7] 执行VBS脚本更新配置文件...
cscript xxx2015-4-16.vbs //Nologo

echo [7/7] 终止旧进程(等待Keeper自动拉起新程序)...
taskkill /f /im aaa2015-4-15.exe

echo 更新完成!请检查程序运行状态。

🔍 二、脚本逐行详解

2.1 前置处理

命令作用说明注意事项
net stop sharedaccess 停止Windows防火墙/ICS服务 Windows 7+可能无效,建议改用 netsh advfirewall set allprofiles state off
del /s d:\*.log ... 递归删除D盘下指定后缀的临时文件 2>nul 隐藏“找不到文件”的错误提示

2.2 FTP下载部分

脚本使用FTP命令行自动下载程序。关键点说明:

  • ftp -n 表示禁用自动登录,后续用 user 命令手动登录
  • binary 设置传输模式为二进制(防止exe文件损坏)
  • 用户名和密码明文存储在脚本中,注意权限控制,避免泄露
  • Windows 2003 不支持从资源管理器拖拽文件到FTP窗口,必须用命令行

2.3 文件替换与进程管理

  • 多目录复制copy aaa2015-4-16.exe D:\Newsvr\aaa1 /Y 将同一个新程序复制到多个目标目录(aaa1~aaa4),适用于多实例部署场景
  • 配置文件更新:通过VBS脚本修改keeper等程序的配置文件内容
  • 进程终止taskkill /f /im aaa2015-4-15.exe 强制结束旧版本进程。/f 表示强制终止

⚙️ 三、与Keeper程序的配合机制

脚本设计的最后一步是只杀死旧进程,而不主动启动新程序,这是为了配合Keeper守护程序的工作机制:

  1. Keeper定期检查:Keeper会监控指定进程的运行状态
  2. 检测到进程消失:当脚本执行 taskkill 后,旧进程终止
  3. 自动拉起新程序:Keeper发现进程不存在,会按照配置自动启动新版本程序(此时新程序文件已被脚本复制到位)
  4. 确保版本一致:新启动的已经是 aaa2015-4-16.exe 版本

这种设计的好处是:无需在脚本中硬编码启动命令,由Keeper统一管理启动参数和运行环境,更加灵活可靠。

⚠️ 四、重要注意事项

🔴 管理员权限

所有操作需要以管理员身份运行命令提示符,否则 net stoptaskkill 可能失败。

🔴 FTP密码安全

脚本中明文的FTP账号密码存在安全隐患。建议:

  • 创建只读权限的专用FTP账户
  • 执行后及时清理脚本或修改密码
  • 考虑使用 ftp -s:script.txt 方式分离凭证文件

🔴 文件路径确认

执行前请确认:

  • D盘存在 \Newsvr\aaa1~aaa4 等目标目录
  • FTP服务器上存在对应的程序文件
  • VBS脚本的路径引用正确

🔴 系统版本差异

net stop sharedaccess 在 Windows XP/2003 上有效,但在 Windows 7/8/10 上可能提示服务不存在。高版本系统建议使用:

netsh advfirewall set allprofiles state off

📝 五、扩展与改进建议

改进点实现方式优势
日志记录 添加 echo %date% %time% 操作成功 >> update.log 方便追踪执行历史和错误
错误处理 检查 %errorlevel%,失败时发送告警 提高脚本健壮性
参数化 将IP、账号、文件名定义为变量 适应不同环境,减少修改
版本回滚 备份旧版本文件后再覆盖 更新失败时可快速恢复

✅ 验证更新结果:

脚本执行后,建议通过以下方式验证:

  • 检查目标目录文件版本:dir D:\Newsvr\aaa1\aaa*.exe
  • 查看进程是否已重启:tasklist | findstr aaa
  • 检查Keeper日志确认自动拉起记录

本文详细解析了Windows批量更新脚本的每个步骤,以及与Keeper守护程序的配合原理。实际使用中请根据具体环境调整路径、文件名和FTP信息。欢迎收藏转发,如有问题请在评论区交流。

posted @ 2015-04-16 00:50  一起走过的路  阅读(289)  评论(0)    收藏  举报