命令行脚本批量转换工具说明
命令行脚本批量转换工具说明
说明
通常使用 NimbleText 工具生成相应的脚本,然后使用 Notepad++ 保存脚本。
NimbleText:用于批量生成命令行脚本。官网链接:http://nimbletext.com/
Notepad++:文本编辑器,保存配置脚本,保存成.txt 格式,编码为“UTF-8 编码”。官网链接:https://notepad-plus-plus.org/
NimbleText 的脚本编辑举例
NimbleText 帮助文档:
https://nimbletext.com/Help/Keywords
NimbleText 的界面分成三个部分:数据,模板,结果,NimbleText 就是将数据和模板结合生成对应的结果。

批量生成地址对象
地址列表 1.24.0.0/13 1.56.0.0/13 1.188.0.0/14 14.204.0.0/15 27.0.128.0/22 FortiGate地址对象配置示例 config firewall address edit "1.1.1.0/24" set subnet 1.1.1.0/24 next end 根据地址对象命令分析,config firewall address和end不需要重复执行,对于edit和set subnet需要根据地址列表的变化而重复。 $ONCEconfig firewall address $EACH edit "$0" set subnet $0 next $ONCEend $ONCE,$EACH,$0都是NimbleText的关键字 $ONCE:任何在'$ONCE'关键字之后的文本将只输出一次,不管有多少行,到'$EACH'关键字或者到文件末尾为止。 $EACH:在'$EACH'关键字之后的任何文本将为每行输出一次(默认会换行),不管有多少行,到'$ONCE'关键字或者到文件末尾为止。 可以随意交错任意多的“$ONCE”和“$EACH”。 $0,$1:$0是第1列的数据,$1是第2列的数据,依次类推。
批量生成地址对象,并将其加入地址对象组
地址列表
1.24.0.0/13
1.56.0.0/13
1.188.0.0/14
14.204.0.0/15
27.0.128.0/22
FortiGate地址对象,地址对象组配置示例
config firewall address
edit "1.1.1.0/24"
set subnet 1.1.1.0/24
next
edit "1.1.2.0/24"
set subnet 1.1.2.0/24
next
end
config firewall addrgrp
edit "group1"
set member "1.1.1.0/24" "1.1.2.0/24"
next
end按照示例 1 的方式,NimbleText 输出如下:

在地址对象配置中 edit "$0" 和 set subnet $0 循环第 1 列数据时,需要换行;在地址对象组 set member$EACH $0 循环第 1 列的数据时,不需要换行。因此需要解决 $EACH 关键自动换行的问题。
修改 $EACH 关键字的输出不自动换行,选择” Tools“-->“Options...”,取消勾选“Output a new line after each row”

$rowDelim:行分隔符,这里利用这个关键字来换行。选择“Tools”-->“Command-line helper”,点击“Options”可以看出行分隔符是 \r\n。

NimbleText 修改后模板脚本如下:
$ONCEconfig firewall address
$EACH
edit "$0"
set subnet $0
next$rowDelim
$ONCEend
config firewall addrgrp
edit "group1"
set member$EACH "$0"
$ONCE$rowDelim next
end
Notepad++ 保存脚本并导入
将 NimbleText 的输出保存在 notepadd++ 中,选择“编码”-->“使用 UTF-8 编码”,并保存。


点击右上角下拉箭头,选择”配置“-->”脚本“,点击”运行脚本“,上传 address_obj.txt,脚本上传成功后会显示“成功”的字样。



上传脚本失败排查
脚本上传显示“失败”的字样,即该脚本有问题。

在上传时,通过 ssh 或者 web console 登录 FortiGate 命令行,可以通过 debug 命令查看具体是哪一行有问题。
# diagnose debug cli 8
# diagnose debug enable
在diagnose debug cli 8的输出中,只有值为0才是成功的。
cmd=/tmp/monitor_upload_nRf481
0: config firewall address
0: edit "1.24.0.0/13"
0: set subnet 1.24.0.0/13
0: next
0: edit "1.56.0.0/13"
0: set subnet 1.56.0.0/13
0: next
0: edit "1.188.0.0/14"
0: set subnet 1.188.0.0/14
0: next
0: edit "14.204.0.0/15"
0: set subnet 14.204.0.0/15
0: next
0: edit "27.0.128.0/22"
-160: set subnet 27.0.128.0 #从这里可以看出这个地址没有掩码,修改后就能够正常上传了
1: next
0: end
0:
0: config firewall addrgrp
0: edit "group1"
-3: set member "1.24.0.0/13" "1.56.0.0/13" "1.188.0.0/14" "14.204.0.0/15" "27.0.128.0/22"
1: next
0: end
0: