本帖最后由 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 宿主启动,在后台静默运行
复制代码 [日志功能]- node.exe 192.168.0.1 Bridge.js log Text FileName
- ::客户端命令 IP 为 192.168.0.1 的服务器端记录一条日志
- ::内容为 Text,保存在 FileName.log 中
复制代码 [遥控功能]- 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__ - 传递数据时的容量[正整数]
复制代码 [变量读写]- 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 开头的变量进行排序
复制代码 [管道功能]- 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,通过管道名可以同时使用多个管道
复制代码 [重定向实例]- 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 中输出一空行
复制代码 [本地增强]- 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 的参数格式设置,均同时支持正则表达式和字符串匹配
复制代码
|