リモートホスト名が必要となる場面は多くないかと想いますが、IPアドレスで接続したり接続時に使用するホスト名と機器に設定しているホスト名が異なる場合を想定すると、自動的にリモートホスト名を取得するメリットを感じる場面もあるかと思います。
ホスト名を得る方法
ホスト名を得る方法としては、リモートホスト上でホスト名を表示するコマンドを実行する事が一番簡単そうですが、接続する機器によってコマンドは異なりますし戻って来た文字列を解析する必要があります。
そこで、通常ネットワーク機器のプロンプトにはホスト名が含まれているという事を考慮して、プロンプトからホスト名を得ることにします。
waitregexを使う
waitregexは正規表現にグループマッチを含めると、システム変数groupmatchstr1~groupmatchstr9にマッチした文字列を格納します。
この機能を使い、リモートホストから1行受信してwaitregexで待ち受ければホスト名だけ切り出す事が出来ます。
実際にホスト名を切り出すことができるサンプルを掲載します。このマクロはCisco、Fortigate、Juniper ScreenOS、CentOSで動く事を確認しています。まだ未確認ですがHPのSWとBIG-IPでも動くと思われます。
call getremotehostname sprintf '[%s]' remotehostname messagebox inputstr remotehostname end :getremotehostname ; 同期モードに設定 setsync 1 ; タイムアウト timeout = 1 ; リモートホスト名 remotehostname = '' while 1 pause 1 sendln waitregex '[a-zA-Z0-9]*@([a-zA-Z0-9\-_]*)' '^<?([a-zA-Z0-9\-_]*)' if result == 0 then messagebox 'リモートホスト名を取得できない' 'タイムアウト' return endif remotehostname = groupmatchstr1 strlen remotehostname if result == 0 then continue else break endif endwhile ; 同期モード解除 setsync 0 return