Part of Shadowgarden.org, focused on Tera Term macros.

Tera Term マクロで機器コマンドを実行する方法を解説【wait, sendln】

目次

Tera Term マクロでコマンドを実行しよう

ネットワーク作業において Tera Term マクロを使用する目的はほとんどがネットワーク機器の CLI コマンドログの取得です。このため、Tera Term マクロでコマンドを実行する処理は最も重要な要素の一つです。

この記事では Tera Term マクロのコマンド実行処理に関わる wait コマンドと sendln コマンドについて説明します。

動作確認環境

  • Tera Term Version 4.104

Tera Term マクロで機器コマンドを実行する流れ

Tera Term マクロで機器コマンドを実行するためには以下の処理を行います。

  • 特定の文字列がコンソール上に表示されるのを待つ
  • 実行したいコマンドを送信する

①を行うのが wait コマンド、②を行うのが sendln コマンドです。以下でそれぞれ説明します。

特定の文字列を待つ wait コマンドの使い方

Tera Term マクロでコマンドを実行する際、そのコマンドを実行すべきタイミングでコマンドを送信する必要があります。コマンドの実行タイミングは wait コマンドを使用して調整します。wait コマンドを使用すると、指定した文字列がコンソール上に表示されるまでマクロ処理を停止することができます

wait コマンドの使用方法は以下の通りです。

wait の使い方
  • wait "<文字列>"
    • <文字列>:待ち受ける文字列。この文字列を受信するまでマクロ処理を停止する
    • 文字列の代わりに文字列を格納した変数を指定することも可能

以下は Cisco 機器の特権EXECモードのプロンプト「MyRouter#」が表示されるのを待ち、表示されたらメッセージを表示するマクロです。

wait "MyRouter#"
messagebox "プロンプトが表示されました" "メッセージ"

wait に与える文字列を以下のように変数にすることもできます。

Prompt = "MyRouter#"
wait Prompt
messagebox "プロンプトが表示されました" "メッセージ"

コマンドを送信する sendln の使い方

Tera Term マクロでコマンドを実行(送信)するために使用するコマンドは sendln です。sendln は指定した文字列を末尾に改行を付加して送信します。使い方は以下の通りです。

sendln の使い方
  • sendln "<文字列>"
    • <文字列>:送信する文字列。この文字列の末尾に改行が付加された上で送信される
    • 文字列の代わりに文字列を格納した変数を指定することも可能

似たコマンドで、末尾に改行を付加しない send というコマンドもありますが、ほとんどの場合は sendln を使うことになるでしょう。

sendln は前項で説明した wait とセットで使用されます。例えば以下のような使い方をします。

  • ログインパスワード入力を促す「Password:」という文字列を wait で待ってから、sendln でパスワードを送信する
  • 特権EXECモードのプロンプト「<ホスト名>#」という文字列を wait で待ってから、sendln で実行コマンドを送信する

wait と sendln の使用例

Telnet 接続後にユーザ認証する

Cisco 機器で Telnet 接続でユーザ認証が設定されている場合、Telnet 接続後に以下のような流れでプロンプトが表示されます。

  • Username:」と表示される
  • ユーザ名入力後、「Password:」と表示される
  • パスワード入力後、認証に成功するとユーザEXECモードのプロンプトが表示される
User Access Verification

Username: admin
Password:
MyRouter>

この流れを考慮すると、以下のようにマクロを作成すれば良いことになります。

  • Telnet 接続する connect コマンドを記述する
  • Username:」を wait で待つ
  • ユーザ名を sendln で送信する
  • Password:」を wait で待つ
  • パスワードを sendln で送信する

これをマクロにすると以下のようになります。

接続先の IP アドレスやユーザ名・パスワード、待ち受けるプロンプトのホスト名部分は対象機器の設定に合わせて変更してください。

;;(1)Telnet接続
connect "10.1.1.1:23 /nossh /T=1"

;;(2)「Username:」を wait で待つ
wait "Username:"

;;(3)ユーザ名を sendln で送信する
sendln "admin"

;;(4)「Password:」を wait で待つ
wait "Password:"

;;(5)パスワードを sendln で送信する
sendln "admin"

更に、ユーザEXECモードから特権EXECモードに移行する処理を含めたい場合は以下を追加します。

;;(6)ユーザEXECモードのプロンプトを wait で待つ
wait "MyRouter>"

;;(7)enable を sendln で送信する
sendln "enable"

;;(8)「Password:」を wait で待つ
wait "Password:"

;;(9)enable パスワードを sendln で送信する
sendln "admin"

Cisco 機器で show コマンドを実行する

Cisco 機器を対象に、特権EXECモードで show コマンドを実行するマクロを作ります。この場合、実行したいコマンド一つにつき以下の処理をセットで記述します。

コマンド実行するための処理セット
  • 特権EXECモードのプロンプトを wait で待つ
  • マクロの受信バッファをクリアする
  • 実行コマンドを sendln で送信する

②のマクロの受信バッファクリアについては、マクロが機器から受信した文字列は受信バッファに保存されますが、この受信バッファに情報が残っていると誤動作をする可能性があるため安全のためにコマンド実行の前にバッファのクリア処理を挟んでおくことを当サイトでは推奨します。受信バッファのクリアは以下コマンドで実行できます。

受信バッファのクリアコマンド
  • flushrecv

さて上記を踏まえて機器のコマンドを1つ実行する処理は以下のようになります。

待ち受けるプロンプトのホスト名部分は対象機器の設定に合わせて変更してください。

;;(1)特権EXECモードのプロンプトを wait で待つ
wait "MyRouter#"

;;(2)マクロの受信バッファをクリアする
flushrecv

;;(3)実行コマンドを sendln で送信する
sendln "show version"

上記(1)~(3)のセットを実行したいコマンド分だけ記述します。以下は3つのコマンドを実行するマクロ例です。

  • terminal length 0
  • show version
  • show running-config
wait "MyRouter#"
flushrecv
sendln "terminal length 0"

wait "MyRouter#"
flushrecv
sendln "show version"

wait "MyRouter#"
flushrecv
sendln "show running-config"

マクロでコマンドを実行するときはページャー機能をOFFにするコマンドを最初に実行するようにしてください。Cisco 機器の場合は上記マクロ例のように「terminal length 0」を最初に送信します。ページャー機能をOFFにしない場合コマンド実行後に「-- More --」が表示されてマクロ処理が止まってしまいます。

より使いやすいマクロを作成することも可能

この記事では waitsendln の基本的な使い方を説明しました。ただ、実際にマクロを作成・使用する場合、この記事で説明している通りにマクロを作成すると手間がかかる、また再利用時の編集にも手間がかかるということが分かるかと思います。

より作成も再利用もしやすいマクロを作成するテクニックが存在します。このためにはいくつかの基礎知識を習得する必要があります。これについては他の記事で順次説明したいと思います。

まとめ

CHECK!
  • Tera Term マクロで機器コマンドを実行する場合 wait で文字列を待ち sendln でコマンドを送信する
  • 受信バッファのクリア(flushrecv) を行い誤動作を予防しよう
  • コマンド実行の際はページャー機能をOFFにしよう


Tera Term マクロ関連記事リスト


Amazon で買えるおすすめアイテム(アフィリエイト)

ブログ始めるなら 【アフィリエイトリンク】

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次