Назад | Перейти на главную страницу

Резервное копирование конфигурации Cisco или перезагрузка с помощью сценария Windows

У нас есть клиент с большим количеством устройств 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

Но проблема в том, что ключи отправки отправляются в сеанс консоли, я пытаюсь найти решение, которое не требовало бы входа пользователя в систему.

У кого-нибудь есть идеи? У меня есть некоторые знания 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
}

Сомневаюсь, что идеально, но работает демонстративно.

Это не совсем ответ на ваш вопрос, но я использую Kiwi CatTools именно для этого.

http://www.kiwisyslog.com/kiwi-cattools-overview/

Вы проверили архивную директиву IOS? Вы можете указать его на tftp-сервер, и каждый раз при изменении конфигурации он просто архивируется. http://www.cisco.com/en/US/docs/ios/12_3t/fun/command/reference/cfrgt_01.html#wp1094316