本帖最后由 CrLf 于 2015-10-6 14:53 编辑
---------------------------------------- 简要说明 ----------------------------------------
Bridge.js 用于跨进程、跨主机交互,基于 NodeJS,必须有 Node.exe 才能运行。
只要创建一个可访问的服务器端,不同进程乃至网内的不同机器都可以轻松地在命令行下协同工作,目前已实现变量读写、管道连接、远程日志等功能,并能通过高级命令进行更详细的操作
默认输出为 utf8 编码,直接上屏时无需设置,但需要重定向或进入管道时,建议开启 /gbk 开关以获得输出,或使用 CScript 执行
进程意外中止时,守护进程会重新启动服务器端,并还原关键数据
命令行参数中单独出现的双引号会被忽略(编译器特性,非脚本行为),需要保留双引号时请写为 \" 或 ""
option 之后的参数默认支持以 %varName% 形式引用环境变量,若要关闭此特性,请使用 /env 开关
---------------------------------------- 兼容宿主 ----------------------------------------
此代码经过兼容处理,也可以在 WScript、CScript 宿主下调用,但仍需要 NodeJS 支持,而且行为细节将有所变化:
CScript 环境下,无论是否启用 /gbk 开关,都将输出为 gbk 编码(node下默认为 utf8),但比直接调用 Node.exe 稍慢,且必须等待进程结束才能看到输出,建议在需要不确定是输出到屏幕还是重定向到文件时使用
WScript 环境下,除非需要查看帮助信息(例如使用了 /help 开关),否则将始终后台静默运行,建议在不需要回显和等待结果的场合使用
---------------------------------------- 基本用法 ----------------------------------------
[创建服务器端] | node.exe Bridge.js server 192.168.0.* 192.168.2.* | | ::创建一个服务器端,默认监听端口为 8848,默认管理员 IP 为 127.0.0.1 | | ::IP 为 192.168.0.* 或 192.168.2.* 的用户均可接入,但不能进行风险操作 | | | | Bridge.js server 192.168.0.* 192.168.2.* | | ::参数与前例一样,不过是由 WScript 宿主启动,在后台静默运行COPY |
[日志功能] | node.exe 192.168.0.1 Bridge.js log Text FileName | | ::客户端命令 IP 为 192.168.0.1 的服务器端记录一条日志 | | ::内容为 Text,保存在 FileName.log 中COPY |
[遥控功能] | node.exe 192.168.0.1 Bridge.js exit 12 | | ::客户端命令 IP 为 192.168.0.1 的服务器端退出脚本,且退出码为 12 | | ::若服务器端未使用 /unsafe 开关,exit/config/remote 命令只能由服务器端管理员执行 | | | | node.exe 8848 Bridge.js config unsafe | | ::查看通过 8848 端口查看本机响应服务器端的 unsafe 设置 | | ::任意命令均可以 [IP]:[端口] 或 [IP] 或 [端口] 的方式执行 | | ::除 server 命令和无需与服务器交互的命令外,都会连接指定的 IP 和端口 | | | | node.exe Bridge.js config unsafe true | | ::命令服务器端将 unsafe 设置改为 true,相当于开启了 /unsafe | | ::能通过 config 开启的开关有: | | :: unsafe/false/alone/quiet/debug - 对应同名开关[布尔值] | | :: host/port - 要连接的目标 IP 与端口[字符串] | | :: 在 server 命令下则是此后新增监听端口的管理员 IP | | :: defaultlogname - 默认日志名称[字符串] | | :: charset/__localCharSet__ - 字符编码名称,不建议修改[字符串] | | :: __clientTimeout__ - 客户端循环 POST 的时间间隔[正整数] | | :: __maxBuffer__ - 传递数据时的容量[正整数]COPY |
[变量读写] | node.exe Bridge.js set varName varValue | | ::客户端A发送一个消息,将变量 varName 设为 varValue | | | | node.exe Bridge.js defined varName | | ::客户端B判断服务器上是否存在变量 varName | | | | node.exe Bridge.js get varName | | ::获取变量 varName 的值 varValue | | | | node.exe Bridge.js set Array Value1 Value2 Value3 | | ::创建一个从 0 开始伪数组,名字为 Array[0]~Array[2],值分别为其后参数 | | ::Value 多于一个的时候才会触发数组设置,设置前会清除原有同名数组 | | | | node.exe Bridge.js delete Array[1] | | ::删除名为 Array[1] 的变量 | | | | node.exe Bridge.js sort Array | | ::对名称以 Array 开头的变量进行排序COPY |
[管道功能] | dir | node.exe Bridge.js pipe in | | ::客户端A使用管道发送 dir 命令的输出 | | | | node.exe Bridge.js pipe out | | ::客户端B从管道中接收输出 | | | | dir | node.exe Bridge.js pipe in Name1 | | ::打开一个名为 Name1 的新管道,否则默认使用空字符为管道名 | | | | node.exe Bridge.js pipe out Name2 | | ::同名管道不能同时接受两个 in 或 out,通过管道名可以同时使用多个管道COPY |
[重定向实例] | node.exe Bridge.js /gbk eval "'abcdefg'.replace(/./g,'$&\n')" | findstr /n . | | ::在本地进行重定向(包括进入管道)时,请开启 /gbk 开关 | | | | cscript -nologo Bridge.js eval "'abcdefg'.replace(/./g,'$&\n')" 2>nul | findstr /n . | | ::也可通过 cscript 调用,则默认将输出转为 gbk 编码 | | ::因为需要区分 cscript 和 wscript,所以会在句柄 stderr 中输出一空行COPY |
[本地增强] | node.exe Bridge.js eval 16*7.5 | | ::在客户端上计算并返回 16*7.5 的结果,无需与服务器端交互,也无权限限制,可以执行复杂的命令 | | ::eval 与 remote 命令相似,区别在于 remote 命令是在服务器端执行,需要有相应权限 | | | | node.exe Bridge.js replace Striing i "" | | ::将 Striing 中的 i 替换为空,仅替换首个符合的位置 | | | | node.exe Bridge.js replace String /.*/ """$&""" | | ::将 String 中符合正则表达式 /.*/ 的部分加上左右双引号,要保留的双引号需复写 | | ::replace/match/test 命令仿照 JavaScript 的参数格式设置,均同时支持正则表达式和字符串匹配COPY |
|