多くのCiscoデバイスを備えたクライアントがあり、telnetを介してこれらのデバイスのバックアップを自動化したいと考えています。 2003サーバーと2008サーバーの両方があり、理想的にはtftpを使用してバックアップします。
私はこれを書いた:
Set WshShell = WScript.CreateObject("WScript.Shell")
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim ciscoList
ciscoList = "D:\Scripts\SwitchList.txt"
Set theSwitchList = fso.OpenTextFile(ciscoList, 1)
Do While theSwitchList.AtEndOfStream <> True
Cisco = theSwitchList.ReadLine
Run "cmd.exe"
SendKeys "telnet "
SendKeys Cisco
SendKeys "{ENTER}"
SendKeys "USERNAME"
SendKeys "{ENTER}"
SendKeys "PASSWORD"
SendKeys "{ENTER}"
SendKeys "en"
SendKeys "{ENTER}"
SendKeys "PASSWORD"
SendKeys "{ENTER}"
SendKeys "copy startup-config tftp{ENTER}"
SendKeys "(TFTP IP){ENTER}"
SendKeys "FileName.txt{ENTER}"
SendKeys "exit{ENTER}" 'close telnet session'
SendKeys "{ENTER}" 'get command Prompt back
SendKeys "{ENTER}"
SendKeys "exit{ENTER}" 'close cmd.exe
On Error Resume Next
WScript.Sleep 3000
Loop
Sub SendKeys(s)
WshShell.SendKeys s
WScript.Sleep 300
End Sub
Sub Run(command)
WshShell.Run command
WScript.Sleep 100
WshShell.AppActivate command
WScript.Sleep 300
End Sub
しかし、これに伴う問題は、sendkeysがコンソールセッションに送信されることです。ユーザーがログインする必要のない解決策を見つけようとしています。
誰かアイデアはありますか?私はVBS、PowerShellについてある程度の知識があり、バッチ処理についてかなりよく理解しています。
私はそれを理解しました(これはそれらを再起動しますが、バックアップのために簡単にキーを再入力できます)これはPowerShellスクリプトです
#param([String] $remoteHost =$(throw "Please specify the Target Server"),[String] $domain = $(throw "Please specify the #recipient Domain"),[String] $sendingdomain = $(throw "Please specify the Sending Domain"))
param([String] $remoteHost,[String] $domain, [String] $sendingdomain)
$remotehosts ="List","Of","Cisco","IPs"
$theUn = "UserName"
$thePw = "Password"
function readResponse {
while($stream.DataAvailable)
{
$read = $stream.Read($buffer, 0, 1024)
write-Host -n -foregroundcolor cyan ($encoding.GetString($buffer, 0, $read))
""
}
}
$port = 23
foreach($remoteHost in $remoteHosts)
{
$socket = new-object System.Net.Sockets.TcpClient($remoteHost, $port)
if($socket -eq $null) { return; }
$stream = $socket.GetStream()
$writer = new-object System.IO.StreamWriter($stream)
$buffer = new-object System.Byte[] 1024
$encoding = new-object System.Text.AsciiEncoding
$command = $theUn
$writer.WriteLine($command)
$writer.Flush()
start-sleep -m 3000
readResponse($stream)
write-Host -foregroundcolor DarkGreen $command
""
$command = $thePw
$writer.WriteLine($command)
$writer.Flush()
start-sleep -m 2000
readResponse($stream)
write-Host -foregroundcolor DarkGreen $command
""
$command = "en"
$writer.WriteLine($command)
$writer.Flush()
start-sleep -m 2000
readResponse($stream)=
write-Host -foregroundcolor DarkGreen $command
""
$command = $thePw
$writer.WriteLine($command)
$writer.Flush()
start-sleep -m 2000
readResponse($stream)
write-Host -foregroundcolor DarkGreen $command
""
$command = "wr"
$writer.WriteLine($command)
$writer.Flush()
start-sleep -m 5000
readResponse($stream)
write-Host -foregroundcolor DarkGreen $command
""
$command = ""
$writer.WriteLine($command)
$writer.Flush()
start-sleep -m 2000
readResponse($stream)
write-Host -foregroundcolor DarkGreen $command
""
$command = "reload"
$writer.WriteLine($command)
$writer.Flush()
start-sleep -m 2000
readResponse($stream)
write-Host -foregroundcolor DarkGreen $command
""
$command = ""
$writer.WriteLine($command)
$writer.Flush()
start-sleep -m 2000
readResponse($stream)
write-Host -foregroundcolor DarkGreen $command
""
$writer.Flush()
readResponse($stream)
## Close the streams
$writer.Close()
start-sleep -m 120000
}
私はそれが完璧だとは思えませんが、それは反抗的に機能します。
これはあなたの質問に正確に答えるものではありませんが、私はまさにこのためにKiwiCatToolsを使用しています。
IOSのアーカイブディレクティブを確認しましたか?tftpサーバーを指すことができ、設定が変更されるたびにアーカイブするだけです。 http://www.Cisco .com/en/US/docs/ios/12_3t/fun/command/reference/cfrgt_01.html#wp1094316