簡介

本文描述了一種建立唯一且單個EEM指令碼的方法，該指令碼能夠執行網路管理員定義的任何命令序列。

必要條件

需求

思科建議您瞭解以下主題：

- Cisco IOS® XE操作知識

- 瞭解嵌入式事件管理器(EEM)指令碼

- 熟悉Cisco Catalyst交換機

- TCL指令碼編寫基礎知識

採用元件

本檔案中的資訊是根據執行IOS XE 17.18.2版的Cisco Catalyst 9600X系列交換器(CS-C9600X)。

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路運作中，請確保您瞭解任何指令可能造成的影響。

背景資訊

管理員建立包含所需命令序列的純文字檔案檔案。然後，EEM指令碼在指定的觸發器上呼叫此檔案，並執行文本檔案中列出的所有命令。

組態和逐步程式

步驟1.使用命令序列建立文本檔案

1. 建立一個文本檔案，其中包含所需順序的命令。

2. 將檔案複製到裝置的快閃記憶體中。

3. 使用FTP、TFTP或TCL指令碼建立或傳輸檔案。

使用TCL指令碼建立文本檔案

語法：

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傳輸。必須根據需要編輯檔案，以包括網路管理員所需的任何命令序列。

步驟2.使用EEM指令碼執行檔案

建立EEM指令碼

此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

EEM指令碼說明

++ event manager applet Cisco_Live authorization bypass:

事件管理器小程式applet-name:註冊具有指定名稱的EEM小程式（本例中為「Cisco_Live」）。

Authorization bypass:指定小程式的可選關鍵字必須繞過AAA授權。

++ event none maxrun 1000:

事件無：這指定將EEM策略註冊到「無」事件檢測器，這意味著策略不是由任何自動事件觸發，而是要手動運行。

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:這是開啟檔案時分配的檔案描述符或控制代碼（例如，使用action050檔案開啟檔案in1。Flash:COMMANDS_TO_EXECUTE.txt r）。

輸入：這是將儲存讀取資料的變數名稱，供後續指令碼操作使用。

++操作070 foreach line $input '\n':

Foreach:此命令指定字串上的小版本。

線路：這是迭代器變數，它將在每次迭代期間儲存每個令牌（行）。

$input:這是包含多行或條目的輸入字串變數。

'\n':這是用於將輸入字串拆分為標籤（本例中為newline字元）的分隔符。

每條線路都是一個令牌，\n在此情況下是分隔器。

++ action 080 cli command $line:

Cli命令：指定操作是在裝置上執行CLI命令。

$line:包含要執行的CLI命令字串的變數。引號可確保將整個字串視為單個命令。

++ action 090 file write fileout1 '$_cli_result':

檔案寫入：用於將資料寫入檔案的EEM命令。

Fileout1:檔案處理程式之前由命令（如file open fileout1 flash:OUTPUT.txt a+）開啟，表示寫入資料的檔案。

「$_cli_result」：儲存CLI命令輸出或任何要寫入檔案的字串資料的變數。這些引號可確保將整個內容視為單個字串。

此命令通常用於執行CLI命令並在$_cli_result中捕獲其輸出後，使指令碼能夠將輸出記錄或存檔到裝置快閃記憶體中的檔案中。

++操作100結束：

End:表示條件塊結束的關鍵字，如if、else或while。

++ action 120 file close file in1:

檔案關閉：關閉檔案描述符的操作。

檔案1:要關閉的檔案描述符的識別符號，該描述符必須在指令碼中較早開啟。

EEM指令碼執行

若要手動觸發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指令碼和思科的EEM相結合，以建立靈活的單一EEM指令碼，該指令碼能夠執行儲存在文本檔案中的任意命令序列。此方法允許網路系統管理員從外部定義命令序列，並自動或手動觸發其執行，藉此增強執行Cisco IOS XE的Cisco Catalyst交換器的自動化和營運效率。