本文档介绍一种创建唯一且单个EEM脚本的方法,该脚本能够执行网络管理员定义的任何命令序列。
Cisco 建议您了解以下主题:
本文档中的信息基于运行IOS XE 17.18.2版本的Cisco Catalyst 9600X系列交换机(CS-C9600X)。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
管理员创建包含所需命令序列的纯文本文件。然后,EEM脚本在指定的触发器上调用此文件并执行文本文件中列出的所有命令。
语法:
tclsh
puts [open "flash:COMMANDS_TO_EXECUTE.txt" w+] {
Enter Commands to Execute
}
exit
配置示例:
要创建关闭接口FiftyGigE1/1/0/3的一系列命令,请执行以下操作:
C9600-Silicon1-SVL#tclsh
C9600-Silicon1-SVL(tcl)#puts [open "flash:COMMANDS_TO_EXECUTE.txt" w+] {
configure terminal
interface fiftyGigE 1/1/0/3
shutdown
end
show run interface fiftyGigE 1/1/0/3
}
C9600-Silicon1-SVL(tcl)#exit
C9600-Silicon1-SVL#
验证闪存中的文件:
C9600-Silicon1-SVL#dir flash:
Directory of flash:/
357117 -rw- 101 Jan 25 2026 21:37:09 +05:30 COMMANDS_TO_EXECUTE.txt
COMMANDS_TO_EXECUTE.txt的内容
configure terminal
interface fiftyGigE 1/1/0/3
shutdown
end
show run interface fiftyGigE 1/1/0/3
此文件可以通过TCL脚本创建或使用FTP、TFTP或RCP传输。必须根据需要编辑文件,以便包含网络管理员所需的所有命令序列。
此EEM小程序执行指定文件COMMANDS_TO_EXECUTE中的所有命令。
event manager applet Cisco_Live authorization bypass
event none maxrun 1000
action 010 cli command "enable"
action 020 cli command "term exec prompt timestamp"
action 030 cli command "term exec prompt expand"
action 040 file open fileout1 flash:OUTPUT.txt a+
action 050 file open filein1 flash:COMMANDS_TO_EXECUTE.txt r
action 060 file read filein1 input
action 070 foreach line $input "\n"
action 080 cli command "$line"
action 090 file write fileout1 "$_cli_result"
action 100 end
action 110 file close fileout1
action 120 file close filein1
++ event manager applet Cisco_Live authorization bypass:
事件管理器小程序小程序名称:使用指定名称(本例中为“Cisco_Live”)注册EEM小程序。
授权绕行:指定小程序的可选关键字必须绕过AAA授权。
++ event none maxrun 1000:
事件无:这指定EEM策略向“none”事件检测器注册,这意味着策略不是由任何自动事件触发,而是要手动运行。
Maxrun 1000:此可选参数将applet或策略的最大运行时设置为1000秒。如果未指定,则默认的最大运行时间为20秒。
++ action 020 cli命令term exec prompt timestamp:
操作020:这是EEM脚本中操作的标签或序列标识符。
term exec prompt timestamp是一个CLI命令,用于在当前终端会话中的提示符上启用时间戳。
此功能通过提供执行每个命令的时间参考来帮助进行故障排除和审核。
时间戳显示在命令输出之前,这使得将事件和命令执行与特定时间关联起来更加容易。
++ action 030 cli command term exec prompt expand:
term exec prompt expand启用当前终端会话的扩展提示符模式。
并且,它将终端配置为显示完整提示而不进行截断或缩写。
它在脚本或故障排除场景中很有用,在这些场景中,需要完整的提示上下文来清晰或解析。
该命令仅影响当前终端会话,不会在会话结束后继续存在。
++ action 040 file open fileout1 flash:OUTPUT.txt a+:
文件打开:这指定打开文件的操作。
Fileout1:这是脚本中使用的文件描述符或句柄名称,用于引用打开的文件。
Flash:OUTPUT.txt:这是该文件所在或将要创建的闪存文件系统中的路径和文件名。
a+:这是文件访问模式,表示打开文件以供读取和附加。如果文件不存在,将创建该文件。写入文件的数据将附加到末尾,而不会截断现有内容。
++ action 050 file open filein1 flash:COMMANDS_TO_EXECUTE.txt r:
文件1:这是脚本中使用的文件描述符或句柄名称,用于引用打开的文件。
Flash:COMMANDS_TO_EXECUTE.txt:这是该文件所在的闪存文件系统中的路径和文件名。
r:这是文件访问模式,表示打开文件仅用于读取。
++ action 060 file read filein1 input:
文件读取:此操作指定从文件读取的操作。
文件1:这是打开文件时分配的文件描述符或句柄(例如,使用action 050 file open filein1. Flash:COMMANDS_TO_EXECUTE.txt r)。
输入:这是存储读取数据的变量名称,以供后续脚本操作使用。
++每个行$input '\n'的操作070:
Foreach:此命令指定字符串上的小版本。
线路:这是迭代器变量,可在每次迭代期间保存每个令牌(行)。
$input:这是包含多行或条目的输入字符串变量。
'\n':这是用于将输入字符串拆分为令牌(在本例中是换行符)的分隔符。
每行是一个令牌,在本例中\n是分离器。
++ action 080 cli command $line:
Cli命令:指定操作是在设备上执行CLI命令。
$行:包含要执行的CLI命令字符串的变量。引号确保将整个字符串视为单个命令。
++ action 090 file write fileout1 '$_cli_result':
文件写入:用于将数据写入文件的EEM命令。
Fileout1:文件处理程序之前通过命令(如file open fileout1 flash:OUTPUT.txt a+)打开,表示写入数据的文件。
'$_cli_result':保存CLI命令输出或任何要写入文件的字符串数据的变量。这些引号可确保将整个内容视为单个字符串。
此命令通常用于执行CLI命令并在$_cli_result中捕获其输出后,使脚本能够将输出记录或存档到设备闪存中的文件中。
++操作100结束:
结束:表示条件块结束的关键字,例如if、else或while。
++ action 120 file close filein1:
文件关闭:关闭文件描述符的操作。
文件1:要关闭的文件描述符的标识符,它必须在脚本中较早打开。
要手动触发EEM脚本,请执行以下操作:
C9600-Silicon1-SVL#event manager run Cisco_Live
在本示例中,手动触发EEM脚本。根据网络要求,脚本可以具有任何触发器。
查看输出文件可显示执行的命令及其结果:
C9600-Silicon1-SVL#more flash:OUTPUT.txt
Enter configuration commands, one per line. End with CNTL/Z.
C9600-Silicon1-SVL(config)#
C9600-Silicon1-SVL(config-if)#
C9600-Silicon1-SVL(config-if)#
C9600-Silicon1-SVL#Load for five secs: 0%/0%; one minute: 1%; five minutes: 1%
No time source, *22:01:35.406 IST Sun Jan 25 2026
------------------ show running-config interface FiftyGigE1/1/0/3 ------------------
Building configuration...
Current configuration : 127 bytes
!
interface FiftyGigE1/1/0/3
description To-Host3-Ten 1/1/3
switchport access vlan 10
switchport mode access
shutdown
end
根据命令序列,接口FiftyGigE1/1/0/3成功关闭。
本文档演示了如何将TCL脚本和Cisco的EEM相结合,以创建灵活的单一EEM脚本,该脚本能够执行存储在文本文件中的任意命令序列。此方法允许网络管理员从外部定义命令序列,并自动或手动触发命令序列执行,从而增强运行Cisco IOS XE的Cisco Catalyst交换机的自动化和运营效率。
| 版本 | 发布日期 | 备注 |
|---|---|---|
1.0 |
17-Apr-2026
|
初始版本 |