使用 js 脚本自动安装最新安备客户端
文章目录
每次安备客户端的代码一更新(即使是一行代码),那么我需要做的事情包括:
- 从 FTP 上下载最新的安装包(包括打开 ftp,输入用户名密码,复制,粘贴等)
- 安装客户端软件(双击,下一步,下一步)
- 修改配置文件中的路径指向开发路径(找到配置文件,打开,修改)
- 重启客户端服务(打开服务,找到相应的服务,右击重启)
本着懒人的原则,计算机是我们最好的朋友,应该将重复的事情应该交给计算机去做。
个人比较喜欢 js,坚信 python 能做的,js 照样能做(很简单),有兴趣的话可以一同学习。
花了点时间记录下如何用 js 自动安装最新安备客户端,希望可以举一反三,用到更多的地方,让电脑帮助我们做更多重复的事情。
1. 安装 nodejs
打开http://nodejs.org/,点击 INSTALL 即可。
2. 安装模块
我们使用到了 ftp 模块,打开 cmd 命令行,进入开发目录,输入:
1
|
npm install ftp |
即可完成模块的安装。
3. 编写代码
新建文件 app.js,这里对代码进行了详细的注释
1 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 |
var fs = require('fs'), // 引入文件系统模块(自带模块) Client = require('ftp'), // 引入安装的 ftp 模块 exec = require('child_process').exec, // 引入 exec 模块,用于运行 cmd 命令 config = require('./config'), // 引入配置文件,例如 ftp 信息等 client = new Client(); function getPackage(callback) { client.on('ready', function() { // 连接 ftp 成功 var year = (new Date()).getFullYear(), // 当前的年份 path = 'ftp_product_installer/onlinebackup/' + year + '/anbay'; // 软件存放到 ftp 的目录 client.cwd(path, function(err) { // cd 到 ftp 目录 client.list(function(err, list) { // 列表文件 client.cwd(getMaxVersion(list), function(err) { // 进入最大版本号的目录下 client.list(function(err, list) { // 列表所有文件 var name = '', version = 0; // 判断并得到最高版本的 exe 文件名称 list.forEach(function(item) { var m = item.name.match(/^anbay-agent_\d+.\d+.(\d+).\d+.exe$/); // 安装包的格式 if (m && version < +m[1]) { name = item.name; version = +m[1]; } }); // 下载保存安装包到当前目录 client.get(name, function(err, stream) { stream.on('close', function() { client.end(); callback(__dirname + '\\' + name); // 下载完成 }); stream.pipe(fs.createWriteStream(name)); }); }); }); }); }); }); client.connect(config.ftp); // 连接 ftp } // 获得最大版本号目录 function getMaxVersion(list) { var max = '0.0.0', compare = function(a, b) { // 比较版本号 if (+a[0] < b[0]) return true; if (+a[1] < b[1]) return true; if (+a[2] < b[2]) return true; return false; }; list.forEach(function(item) { if (compare(max.split('.'), item.name.split('.'))) { max = item.name; } }); return max; } function installPackage(path, callback) { var cmd = path + ' /qn /norestart QUIET=1'; // 执行静默安装命令 exec(cmd, function(err, stdout, stderr) { if (err) throw err; exec('del ' + path, callback); // 安装完成执行删除下载的安装包 }); } // 修改配置文件并重启服务 function updateConfig() { var configFile = 'C:/ProgramData/scutech/AnBay/mongoose.conf', content = fs.readFileSync(configFile).toString(); // 读取文件内容 content = content.replace(config.install_path, config.debug_path); // 替换文件内容 fs.writeFileSync(configFile, content); // 重新将内容写入到文件 // 重启服务 exec('sc stop ScutechAnBayAgent', function(err, stdout, stderr) { exec('sc start ScutechAnBayAgent', function(err, stdout, stderr) { console.log('ok'); }); }); } getPackage(function(path) { installPackage(path, function(err) { updateConfig(); }); }); |
4. 运行脚本
1
|
node app |
最后附上完整的脚本下载 anbay-agent-auto-install.zip
文章作者 wenzhixin
上次更新 2013-11-11