シスコデバイスの一部のプロセスを自動化するためにSecureCRTと組み合わせて使用するVBSには、次のコードがあります(非常に簡素化されています)。
Sub prConnectToHost(strConnectHost)
'If no host is passed into subroutine then we need to prompt for one.
If strConnectHost = "" Then strConnectHost = LCase(crt.Dialog.Prompt("Enter hostname or IP address:", "Connect to a host", strHost, False))
strHost = strConnectHost
'If user hits Cancel or hits Ok with no hostname entered then exit.
If strHost = "" Then
booReconnect = False
Exit Sub
End If
'Write to connection log
Call prWriteToConnectionLog
'Run command capture subroutine.
Call prCommandLoop
Set intWaitString = Nothing: Set strScreenGet = Nothing
Set strLatestScriptVersion = Nothing: Set strConnectHost = Nothing
End Sub
サブメインには次のようなセクションがあります。
Do While booReconnect = True
Call prConnectToHost("")
Loop
crt.Dialog.Prompt
と同じですがMsgBox
、画面ではなくウィンドウの中央に配置されるだけなので、少しすっきりしています。変数strHost
は、スクリプト内でグローバルであり、接続するホスト名を含む実際のホスト名文字列です。これはPrompt
デフォルトのテキストとして行で使用されます。切断してbooReconnect
フラグが設定されると、これSub
が再度呼び出され、次にホスト名の入力を求められたときに、古いホスト名が表示されます。スペルを入力すると便利です。初めて間違った、または同じような名前のデバイスの束に接続しています。
prCommandLoop
これの最後にどこを呼び出すかがわかります。これは、特定の文字列シーケンスが見つかるまでスクリプトを保留にするcalledSub
を使用するループです。その場合、いくつかのものを起動し、再び待機するまでループバックします。crt Function
WaitForStrings
自動化コマンドの1つは、接続メニューの存在を検出し(したがって、ルーターセッションを終了しました)、接続する別のホスト名の入力をユーザーに求めます。
重要なビットは、最後の変数のクリアアップにあります- Set strConnectHost = Nothing
。これをそのままにして、すぐにsetで終了prCommandLoop
すると、適用されるとすぐに死にます。これを参照しようとすると、エラーが発生します。の最後に線を引くことを試みましたが、これが証明されました。booReconnect
Set strConnectHost = Nothing
strHost
Object Variable not set
MsgBox strHost
Sub
奇妙なことに、prCommandLoop
最初に別の自動化コマンドを選択してからセッションを終了しても、Set strConnectHost = Nothing
誰も気にしないようです。
それが私を困惑させているので、誰かがこれが問題である理由を説明するのを手伝ってもらえますか?Set strConnectHost = Nothing
(サブの最後に発行しないことで)簡単に回避できますprConnectToHost
が、問題が何であるかを理解したいだけです。