东方网力公司技术文档 . . . . . . .. . .
PowerShell 指令描述 文档版本历史:
2004年2月11日,钟宏全创建0.1版
2004年2月25日,蒋宗文修改0.2版,补充了一些辅助指令 1 概述
本文档描述了PowerShell 实现的所有指令,给出了这些指令的语法以及一些简单的使用实例。
本文档的RMIP 通讯指令基本上与RMIP 协议文档中描述的指令一一对应。RMIP 协议文档及相关文档给出每条指令的详细含义。
除了这些RMIP 通讯指令外,还有一些建立/拆除连接以及其它辅助指令,本文档将给出它们的详细定义。
2 一些规则
? 首字母小写
为了区别以前版本的JSShell 指令,PowerShell 的指令将采用首字母小写的方式给出,例如,对于RMIP 中的GetProtocolVersion 指令,在PowerShell 中对应的指令为getProtocolVersion 。
? IP 地址采用点分十进制,而不是协议文档中描述的U32。 ? 两种调用方式
RMIP 中的所有指令均有一个表示该指令执行是否成功的返回值(大于等于0表示成功,小于0表示错误),同时有些指令包含需要返回的参数,根据指令是否有返回参数,可以把PowerShell 的所有指令分为以下的两类指令: 1. 对于没有返回参数的指令,其调用语法为: funcname(parm1,…)
2. 对于有返回参数的指令,其调用语法为: funcname(result, parm1,…)
其中的result 是一个动态数组,实现程序将把结果放置到这个数组中。 ? 可变参数
有些指令需传入的参数个数是不确定的,此时,这个指令要有一个count 类型的参数(设为xxx-count ),在这个参数之后的所有参数均要重复xxx-count 次。例如对于setAccess 指令,它可以一次为一个用户/用户组设置某对象的权限,也可以为多个用户/用户组设置该对象的权限。参见以下的例三。
? 可变返回参数
东方网力公司技术文档
与上述的可变化参数相同,返回参数也是可变的。在这些指令的result数组中会有一个count类型的值(设为xxx-count),在这个值之后的返回参数均要重复xxx-count次。
参见以下的例四。
举例一(无返回参数):
ret = setDateTime(“20040211120000”)
if (ret < 0)
print(“设置服务器日期时间时出错!”)//可能当前用户无权限else
print(“设置服务器日期时间时成功!”)
举例二(有返回参数):
result = []
ret = getProtocolVersion(result)
if (ret < 0)
print(“得到版本号时出错!”)
else
print(“协议的版本号是:”, result[0]>>16, ”.”, result[0]&0xffff)
举例三(可变参数):
ret = setAccess(“object_name”, 3,
“user_or_usergroup_name1”, right1, “expired_date_time1”
“user_or_usergroup_name2”, right2, “expired_date_time2”,
“user_or_usergroup_name3”, righ13, “expired_date_time3”)
if (ret < 0)
print(“权限设置出错!”)
else
print(“权限设置成功!”)
举例四(可变返回参数):
result = []
ret = getAccess(result, “object_name”)
if (ret < 0) {
print(“权限设置出错!”)
return
}
flags = result[0]
count = result[1]
for (var i=2; i<2+count*3; i+=3) {
//在这里输出权限的内容或进行处理
print(“User-group-object-name:”, result[i]);
print(“Right:”, result[i+1]);
print(“Expired-date-time:”, result[i+2]);
}
东方网力公司技术文档3 RMIP指令
本节对PowerShell的所有指令进行分类列表。列表只给出了示意性地使用指令的方法(示意性的英文,在需要字符串的时候加了引号),传入的参数以及返回的参数的具体含义请参见<
另外,本节还单独列出了几个比较复杂的指令。
3.1 无返回参数的指令
?setDateTime(“YYYYMMDDhhmmss”)
?ipConfig(“ipaddr”, ”Netmask”, “Default-gateway”)
?login(“username”, “password”)
?logout()
?setObjectName(“object_name”, “new_name”)
?setAccess(“object_name”, access_count, “user_or_usergroup_name”, right,
“expired_date_time”, …)
?setAccessFlags(“object_name”, flags)
?deleteObject(“object_name”)
?deleteProperty(“object_name”, property)
?deleteFile(“file-name”)
?fill(av-port, x, y, width, height, color)
?text(av-port, x, y, color, “text-string”)
?scanDisk()
?formatDisk(disk-number, partition-count, partition-size, …)
?formatPartition(disk-number,partition-number)
?ejectDisk(disk-number)
?ptzControl(av-port, ptz-cmd,ptz-parm)
?lockCamera(av-port, locked)
?setAutoRecord(“Source-channel-name”, “Storage-channel-name”, ”Condition”)
?clearAutoRecord(“Storage-channel-name”, “Condition”)
?startTransfer(“Source-channel-name”, Data-type, target_count, Target-channel-
name, …)
?stopTransfer(“Target-channel-name”)
?setEventTransfer(“Target-channel-name”, Event-type, Event-count, Event-op-
bitmask, Event-port-bitmask …)
东方网力公司技术文档
?setAlarm(Alarm-count, Alarm-op-bitmask, Alarm-port-bitmask …)
3.2 有返回参数的指令
?getProtocolVersion(result)
?getIPConfig(result)
?getAccess(result, “object_name”)
?getAccessByRole(result, “user_or_usergroup_name”,”parent_object_name”)
?listObject(result, ”parent_object_name”, “condition”)
?listFile(result, “storage-channel-name”, Data-type, “Begin-date-time”, “End-
date-time”)
?deleteManyFile(result, “storage-channel-name”, Data-type, “Begin-date-time”,
“End-date-time”)
? listFilm(result, “condition”)
?scanAlarmDevice(result)
?listAutoRecord(result)
?listTransferStatus(result)
?prepareMulticast(result, “Source-channel-name”, Data-type)
?getTCPChannelName(result)
?listEventTransfer(result, “Target-channel-name”)
?executeMacro(result, “Macro-text”)
3.3 setObject
语法:setObject(result, “object_name”, Flags, Property_count, property, value…,)
共有Property-count个property和value参数。
result的内容为Failed-count, Property, Failed-code, …后面二项按failed-count重复。
举例如下:
ret =setObject(result, “av/1”,0, 2, title的id, “大门”, bitrate的id, “1000000”)
if (ret >=0) {
print(“设置属性成功!”)
return
}
for (var i=1; i<1+result[0]*2; i+=2) {
print(“property id:”,result[i]);
print(“Failed-code:”,result[i+1]);
}
东方网力公司技术文档
3.4 listProperty
语法:listProperty(result, “object_name”)
如果成功,result的内容为Property-count, property, value,其中后面两项重复Property_count次。
举例如下:
ret = listProperty(result, “av/1”)
if (ret < 0) {
print(“列出属性时出错!”)
return
}
for (var i=1; i print(“property id:”,result[i]); if (result[I+1] == null) print(“该属性是long string或long binary或password类型”); else print(“property value:”,result[I+1]); } 3.5 getProperty 语法:getProperty(result, “object_name”, Property-count, Property, …),其中Property-count是大于0且小于等于32的值。 如果成功,result的内容为value…,其中value的个数为property-count。 举例如下: ret =getProperty(result, “av/1”,2, title的id, Bitrate的id) if (ret < 0) { print(“取得属性时出错!”) return } for (var i=0; i<2; i++) { if (result[i] == null) print(“该属性不存在或是password类型”); else print(“property value:”,result[i]); } 3.6 数据夹带指令 在使用夹带数据时通常要用到Raw对象。Raw对象实现了从文件中读取数据以及把数据保存为文件的功能。 ?updateSystemFile(new Raw (“update_file_pathname”)) ?bitmap(av-port, x, y, new Raw (“bitmap-file-pathname”)) 东方网力公司技术文档 captureImage(result, av-port, File-format),如果成功,result[0]是一个Raw 对象,内含图像数据,可以使用Raw.store()方法将其保存为文件。 3.7 录像文件存取指令 目前不予支持。 4 RMIP辅助指令 r = init(host[, port])建立RMIP连接 r = uninit()拆除RMIP连接 errText = getErrorText(r)获得RMIP指令返回码的字符串信息 5 其它辅助指令 version()得到当前JavaScript的版本 print(var1, var2, …)打印并换行 printN(var1, var2, …)打印但不换行 gc()内存垃圾回收 buildInfo()得到本Shell的构造日期 load(fileName)装入并执行JavaScript脚本文件 line()得到当前行号 fLog = openLog(logFileName)打开日志文件 writeLog(fLog, var1, var2, …)写日志文件 closeLog(fLog)关闭日志文件