シスコデバイスの一部のプロセスを自動化するために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 FunctionWaitForStrings
自動化コマンドの1つは、接続メニューの存在を検出し(したがって、ルーターセッションを終了しました)、接続する別のホスト名の入力をユーザーに求めます。
重要なビットは、最後の変数のクリアアップにあります- Set strConnectHost = Nothing。これをそのままにして、すぐにsetで終了prCommandLoopすると、適用されるとすぐに死にます。これを参照しようとすると、エラーが発生します。の最後に線を引くことを試みましたが、これが証明されました。booReconnectSet strConnectHost = NothingstrHostObject Variable not setMsgBox strHostSub
奇妙なことに、prCommandLoop最初に別の自動化コマンドを選択してからセッションを終了しても、Set strConnectHost = Nothing誰も気にしないようです。
それが私を困惑させているので、誰かがこれが問題である理由を説明するのを手伝ってもらえますか?Set strConnectHost = Nothing(サブの最後に発行しないことで)簡単に回避できますprConnectToHostが、問題が何であるかを理解したいだけです。